如何将Durandal#composition整合到淘汰模板引擎中

时间:2013-03-08 10:29:05

标签: knockout.js kendo-ui durandal

我使用kendo ui grid,它允许模板用于渲染行。它使用KO模板引擎,它希望模板在标签中,但是我想要外化模板并使用Durandal Compose插件......任何想法如何轻松地挂钩?

1 个答案:

答案 0 :(得分:0)

问题是异步/外部加载模板。这是通过durandal的正常视图的组合绑定来完成的。 kendo模板不支持此功能。我现在的解决方案是通过compose绑定加载模板,让kendo网格使用它。事实上我正在使用kendo knockout,它支持kendo网格中的淘汰模板。所以我不必在html中编写javascript(rowTemplate:kendo.template($(“#rowTemplate”)。html()))。

唯一的问题是,如果我通过另一个模板加载网格,行绑定的组合不能在同一个模板中。它应该像

<html>
  <div data-bind="compose:{view:rowTemplateFromServer}"></div>
  <div data-bind="compose:{view:templateWithKendoGridBindinh}"></div>
</html>

这不适合维护或我的下一代开发....我想我必须延长淘汰剑道使用durandal compose绑定。 (knockoutkendo确实支持外部模板,但它不能在durandal或jquery 9下工作)


修正:

我已经修改了KoExternalTemplate库中的ExternalTemplateSource.js以使用Durandal的viewLocator而不是使用infuser,现在我可以很好地使用kendo网格而没有任何问题(如上所述)。 ExternalTemplateSource.js中的getTemplate函数现在如下所示:

getTemplate: function () {
  var self = this;
  viewLocater.locateView(self.templateId).then(function (element) {
    self.data("precompiled", null);
    var t = $(element).html();
    //system.log("got template: "+t );
    self.template(t);
    self.loaded = true;
  });
}