【问题标题】:Use Kendo grid with knockout-kendo and Knockout External-Template-Engine将 Kendo 网格与 Knockout-kendo 和 Knockout External-Template-Engine 一起使用
【发布时间】:2014-01-03 01:27:18
【问题描述】:

感谢 kendo-kendo 软件包,我正在使用带有 kendo 的 kendo grid。

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

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

但是,它不起作用 - 在页面加载期间检查网络请求时,没有加载剑道行模板的请求。

知道如何让它工作吗?


编辑 我刚刚注意到,当我将行模板移动到外部文件时,我收到以下 javascript 错误,即使在页面中使用 rowTemplate inline 可以正常工作。

ReferenceError: gridOptions 未定义

【问题讨论】:

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


    【解决方案1】:

    其实我知道如何使用它。 解决方法如下图:

    • 将 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 = '我的模板' }

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

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

    就是这样。

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

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 2014-06-07
      • 2013-01-08
      • 2013-03-17
      • 2013-01-02
      • 2017-02-20
      • 2015-03-04
      • 2018-02-01
      • 2013-04-26
      相关资源
      最近更新 更多