使用带有knockout-kendo和Knockout外部模板引擎的Kendo网格

时间:2013-12-15 17:43:23

标签: templates knockout.js kendo-grid knockout-kendo

我使用kendo grid with knockout,感谢knockout-kendo包。

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

<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>        

我的viewmodel中的代码:

// 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指向&#34;伪模板&#34;在html文件中,并在其中定义对外部模板的引用,将$ data作为数据上下文传递如下:

  3. <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 inline也能正常工作。

    ReferenceError:未定义gridOptions

1 个答案:

答案 0 :(得分:0)

实际上我弄清楚如何使用它。 解决方案如下所示:

  • 配置infuser以在模板的公共位置下使用模板路径,并在不带扩展名的子文件夹匹配页面名称中使用模板路径:
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'的任何元素。 如果你这样做,模板引擎会将该元素视为模板并尝试使用它,而不是加载实际的模板文件

就是这样。

我最初遇到的问题是我在页面上有另一个与模板名称相同的元素。这就是模板引擎没有选择实际模板文件的原因。