require.js返回knockout,而不是所需的文件

时间:2013-10-29 01:19:37

标签: jquery knockout.js kendo-ui requirejs durandal

我正在使用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而不是请求的文件。

1 个答案:

答案 0 :(得分:0)

您在这里遇到的问题是使用compose绑定处理程序。它必须与视图和模型挂钩。如果没有真正看到您的真实项目代码,我的假设是视图和模型没有排列在compose以找到它们。

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

  1. model.html添加到views文件夹:

    <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' }">
    
  3. 另外,请查看DurandalJS文档中的Using Composition,了解如何处理compose的其他想法。