使用带有击倒剑道和击倒外部模板引擎的剑道网格



我使用的是带有knockout的剑道网格,这要归功于knockout剑道包。

我有网格和网格的配置定义如下:

<div id="gridResult" data-bind="kendoGrid: gridOptions"> </div>

模板:

<script id="rowTmpl" type="text/html" >
    <tr >
        <td data-bind="text: PermitNumber"></td>
        <td data-bind="text: WorkTypeDescription"></td>
        ....
    </tr>
</script>        

我的视图模型中的代码:

// search result
this.SearchResult = ko.observableArray();
this.gridOptions = {
            data: self.SearchResult,
            pageable: { pageSize: 20 },
            useKOTemplates: true,
            rowTemplate: "rowTmpl"
}

我填充了数据源,一切都很好。

然而,我使用的是Knockout.js-External-Template-Engine,它可以很好地与应用程序中的各种模板配合使用,但不能与用于剑道网格行的模板配合使用。

我试着用两种方式设置它:

  1. 在gridOptions.rowTemplate中命名外部模板(但我不知道如何将对数据对象的引用传递给外部模板引擎,所以放弃这个)

  2. 让gridOptions.rowTemplate指向html文件中的一个"伪模板",并在其中定义对外部模板的引用,将$data作为数据上下文传递给它,如下所示:

<script id="rowTmpl" type="text/html" >
    <!-- ko template: {name: 'gridRow',  data: $data}-->
    <!-- /ko -->
</script>

外部模板gridRow.tmpl.html如下:

<tr >
        <td data-bind="text: PermitNumber"></td>
        <td data-bind="text: WorkTypeDescription"></td>
        ....
</tr>

然而,它不起作用——在页面加载期间检查网络请求时,没有请求加载kendo行模板。

知道如何让它工作吗?


编辑我刚刚注意到,当我将行模板移动到外部文件时,我会得到以下javascript错误,即使在页面中使用rowTemplate内联也可以。

ReferenceError:gridOptions未定义

实际上我已经知道如何使用它了。解决方案如下所示:

  • 将注射器配置为在模板的公用位置下使用模板路径,并在不带扩展名的匹配页面名称的子文件夹中使用模板路径:
infuser.defaults.templateSuffix = ".tmpl.html";
infuser.defaults.templateUrlRoot = "/templates/modules";
infuser.defaults.templateUrl = infuser.defaults.templateUrlRoot + '/' +
    window.location.pathname.replace(/.[^./]+$/, "").substr(1);
  • 将gridOptions中的rowTemplate设置为另一个元素的页面中不存在的ID

this.gridOptions={rowTemplate='myTemplate'}

  • 在查找模板的文件夹中创建一个文件,并将其命名为rowTemplate中的模板名称设置,然后只定义实际的模板标记,而不包含。。。标记在我的例子中,模板文件是/template/modules/mypage1/myTemplate.tmpl.html

  • 非常重要请确保页面上没有ID为'myTemplate'的任何元素。如果你这样做了,模板引擎会将该元素视为模板,并尝试使用它,而不是加载实际的模板文件

就是这样。

我最初遇到的问题是页面上有另一个和模板名称同名的元素。这就是为什么模板引擎没有获取实际的模板文件。

相关内容

  • 没有找到相关文章

最新更新