0

我正在使用 kendoPanelBar淘汰赛-剑道绑定,我遇到了 Durandals system.acquire 方法在获取视图模型时返回淘汰赛对象的问题。这似乎只发生在我从面板事件中执行 system.aquire 时。如果我从面板外部的单击事件中运行相同的代码,一切似乎都可以正常工作。有任何想法吗?

在父视图模型中:

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>

----Update----
sample
该示例直接调用 require() ,因为这就是 Durandals system.acquire 在内部所做的。每隔一段时间,示例就会正常工作,如果发生这种情况,只需点击刷新,您就会看到问题。<li>在调试器打开的情况下单击列表中的第一个,您将看到它返回敲除而不是请求的文件。

4

1 回答 1

0

您在这里遇到的问题是compose绑定处理程序。它必须与视图和模型挂钩。在没有真正看到您的真实项目代码的情况下,我的假设是视图和模型没有排成一列compose以便找到两者。

您在问题中的示例和问题中的示例不同。下载的示例,我必须通过做两件事来解决:

  1. 添加model.html到视图文件夹:

    <div>
      <div>Model Details</div>
      <div data-bind="text: name"></div>
    </div>
    
  2. 更改了文件中的compose绑定welcome.html

    <div data-bind="compose: { model: module, view: 'views/model.html' }">
    

此外,请查看DurandalJS 文档中的Using Compositioncompose以了解如何处理.

于 2013-11-02T20:27:36.623 回答