如何将 Durandal#composition 集成到淘汰赛模板引擎中
Posted
技术标签:
【中文标题】如何将 Durandal#composition 集成到淘汰赛模板引擎中【英文标题】:How to integrate Durandal#composition into knockout template engine 【发布时间】:2013-02-23 20:53:58 【问题描述】:我使用允许模板用于渲染行的 kendo ui 网格。它使用 KO 模板引擎,它希望模板在标签中,但是我想将模板外部化并使用 Durandal Compose 插件......知道如何轻松挂钩吗?
【问题讨论】:
Kendo 绑定模型的原生方式与 Knockout 的方式非常相似,但又不一样。这是 MVVM 的两种完全不同的实现。然而,Durandal 是建立在 KO 之上的。 这在另一个帖子中得到了很好的回答:***.com/questions/15409941/… 【参考方案1】:问题是从外部加载模板 async/。这是通过 durandal 的普通视图的 compose 绑定来完成的。剑道模板不支持这个。我现在的解决方案是通过组合绑定加载模板并让剑道网格使用它。事实上,我正在使用剑道淘汰赛,它支持剑道网格中的淘汰赛模板。所以我不必在 html 中编写 javascript (rowTemplate: kendo.template($("#rowTemplate").html()))。
唯一的问题是,如果我通过另一个模板加载网格,行绑定的组合不能在同一个模板内。应该是这样的
<html>
<div data-bind="compose:view:rowTemplateFromServer"></div>
<div data-bind="compose:view:templateWithKendoGridBindinh"></div>
</html>
这不利于维护或我的下一代开发人员......我认为我必须扩展淘汰赛剑道才能使用 durandal 组合绑定。 (knockoutkendo 确实支持外部模板,但它在 durandal 或 jquery 9 下不起作用)
固定:
我已经修改了 KoExternalTemplate 库中的 ExternalTemplateSource.js 以使用 Durandal 的 viewLocator 而不是使用注入器,现在我可以很好地使用剑道网格而没有任何问题(如上所述)。 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;
);
【讨论】:
我已经修改了 KoExternalTemplate 库中的 ExternalTemplateSource.js 以使用 Durandal 的 viewLocator 而不是使用注入器,现在我可以很好地使用剑道网格而没有任何问题(如上所述)。 ExternalTemplateSource.js 中的 getTemplate 函数如下所示以上是关于如何将 Durandal#composition 集成到淘汰赛模板引擎中的主要内容,如果未能解决你的问题,请参考以下文章
如何开始使用带有 Durandal SPA 应用程序的 Phonegap Build?
Select2 Js 下拉菜单在 durandal Js 中不起作用