2013-10-29 21 views
0

我使用的kendoPanelBar knockout-kendo bindings和我在與Durandals system.acquire方法的問題,我返回淘汰賽對象時,我獲得視圖模型。這似乎只發生在我從面板事件中執行system.aquire的時候。如果我從面板以外的點擊事件運行相同的代碼,一切似乎都可以正常工作。有任何想法嗎?require.js將返回淘汰賽,而不是所需的文件

在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
樣品呼叫要求()直接因爲這是Durandals system.acquire在內部做的。每當樣本正常工作時,如果發生這種情況,只需點擊刷新即可看到問題。在調試器打開的情況下單擊列表中的第一個<li>,您將看到它返回knockout而不是所請求的文件。

回答

0

您在這裏遇到的問題是使用compose綁定處理程序。它必須被視爲一種觀點和模型。如果沒有真正看到您的真實項目代碼,我的假設是,該視圖和模型不排列compose找到兩者。

你問題中的例子和問題中的例子是不同的。下載的例子,我做兩件事情來解決:

  1. 添加model.html的意見文件夾:

    <div> 
        <div>Model Details</div> 
        <div data-bind="text: name"></div> 
    </div> 
    
  2. 改變了composewelcome.html文件綁定:

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

另外,看看Using Composition在DurandalJS文檔中提供了其他想法如何處理compose

+0

我用了很多次,只給它一個viewmodel參數。如果我在頁面加載時設置模塊屬性,而不是在擴展事件中一切正常。 – Tyler

+0

延遲加載模塊屬性的原因是什麼? – chafnan

+0

性能問題,我不想加載一個模塊,如果用戶永遠不會去它。在我的真實項目中,可能有15個模塊全部撥打服務電話。 – Tyler