我正在使用kendoPanelBar knockout-kendo bindings,我遇到了Durandals system.acquire方法的问题,当我获取一个viewmodel时,我返回了敲除对象。这似乎只发生在我从panel事件中执行system.aquire时。如果我从面板外部的单击事件运行相同的代码,一切似乎都可以正常工作。有什么想法吗?
ParentViewModel中的:
this.stepExpand = function (e) {
currentStep = ko.dataFor(e.item);
if (currentStep.isLoaded() != true) {
return system.acquire(currentStep.moduleId()).then(function (**module**) {
var module = new module(); <--getting the ko object here
module.activate();
currentStep.module(module);
});
}
};
家长观点:
<ul data-bind="kendoPanelBar: { expandMode: 'single', widget: panel, expand: stepExpand, select: stepSelected}, foreach: steps">
<li data-bind="kendoPanelItem: {enabled: enabled}, visible: visible">
<span data-bind="text: name"></span>
<div data-bind="compose: module"></div>
</li>
---- ----更新
sample,
该示例直接调用require(),因为这是Durandals system.acquire在内部执行的操作。每当进样时,样本将正常工作,如果发生这种情况只需点击刷新,您将看到问题。单击列表中的第一个<li>
,调试器打开,您将看到它返回knockout而不是请求的文件。
答案 0 :(得分:0)
您在这里遇到的问题是使用compose
绑定处理程序。它必须与视图和模型挂钩。如果没有真正看到您的真实项目代码,我的假设是视图和模型没有排列在compose
以找到它们。
问题中的示例和问题中的示例不同。下载的例子,我通过做两件事来解决:
将model.html
添加到views文件夹:
<div>
<div>Model Details</div>
<div data-bind="text: name"></div>
</div>
更改了compose
文件中的welcome.html
绑定:
<div data-bind="compose: { model: module, view: 'views/model.html' }">
另外,请查看DurandalJS文档中的Using Composition,了解如何处理compose
的其他想法。