2014-02-14 23 views
1

任何人都知道從兒童viewmodel傳回數據的正確方法?durandal撰寫 - 如何傳遞數據進出兒童viewmodel?

我的孩子viewmodel執行和操作,然後需要觸發父模型中的事情刷新。

比如我在做這樣的事情在我的子模型:

vm.activate = function (params) { 
     vm.TaskTypeId = params.TaskTypeId; 
     vm.Sections = params.Sections; 
     vm.FieldId = params.FieldId; 
     vm.Dimensions = params.Dimensions; 

,並調用它像這樣

<div data-bind="sortable: {data: Fields,beforeMove:$root.preOrder,afterMove:$root.saveOrder}"> 
         <div class="item"><a data-bind="text:Name,click:function() {$root.edit(Id());}" style="margin-left:20px;"></a> 
          <!-- ko if: $root.selectedFieldId()==Id() --> 
          <!-- ko compose:{model:'tasktype/edittasktype/addedittasktype',activationData:{TaskTypeId:$root.TaskTypeId, Sections:$root.Sections,FieldId:$root.selectedFieldId,Dimensions:$root.Dimensions } } --><!-- /ko --> 
          <!-- /ko --> 
         </div> 
        </div> 

這似乎工作,但我想知道是否有更好的方法?

回答

1

您可以自己實例化您的子視圖模型(在JS代碼中,而不是讓撰寫處理程序執行此操作),然後將其分配給您的父視圖模型的一個屬性,您可以依次組合該屬性。

function Parent() { 
    this.child = new Child; 
} 
return Parent; 

... 

<!-- ko compose: child --> ... 

然後,您可以使用child屬性從父級訪問所有子級屬性。

如果您需要從子視圖模型訪問父屬性,則可以在子構造函數中傳遞對父項的引用(這可能是也可能不是一個好主意,具體取決於您希望它們如何耦合是)。

+0

這很有幫助,但我問的是如何從孩子訪問父母。所以,如果兩個模塊都是單身人士,我可以在子模型中使用這種相同的方法來訪問父級?或者如果有兩個單引號模型相互引用綁定到頁面,會淘汰怪異的東西嗎?謝謝 – pilavdzice

+1

如果他們是單身人士,則更簡單;只需要'()'在父母的孩子和..那麼你有它。 – tne

+0

太棒了,謝謝! – pilavdzice