2013-02-19 34 views
1

在我看來,我通過一個observableArray(itemGroup)循環了一個屬性,它也是一個observableArray(item)。我有一個方法來刪除整個itemGroup和一個刪除項目和itemGroup,但我想添加一些邏輯沿它的行只有一個項目組中刪除該項目也應該刪除itemGroup。在嵌套循環中刪除父類中的敲除函數

這裏是我的視圖模型和視圖的相關部分的一個例子。

我的JS

var ItemModel = function(item) { 
    var self = this; 
    self.name = ko.observable(item.name); 
    self.price = ko.observable(item.price); 
}; 

var ItemGroupModel = function(itemGroup) { 
    var self = this; 
    self.order = ko.observable(itemGroup.order); 
    self.items = ko.observableArray(ko.utils.arrayMap(itemGroup.items, function(item){ 
     return new ItemModel(item); 
    })); 
    self.type = ko.observable(item.type); 

    self.removeItem = function(item) { 
     self.items.remove(item); 
    } 
}; 

var ViewModel = function(data) { 
    var self = this; 
    self.itemGroups = ko.observableArray(ko.utils.arrayMap(data.itemGroups, function(itemGroup) { 
    return new ItemGroupModel(item); 
    })); 

    // some other properties and methods 
    self.removeItemGroup = function(itemGroup) { 
    self.itemGroups.remove(itemGroup); 
    } 
}; 

我查看

<ul data-bind="foreach: {data: VM.itemGroups, as: 'itemGroup'}"> 
    <li> 
     <button data-bind="click: $root.VM.removeItemGroup">X</button> 
     <ul data-bind="foreach: {data: itemGroup.items, as: 'item'}"> 
      <li> 
      <!-- ko if: itemGroup.items().length > 1 --> 
      <button data-bind="click: itemGroup.removeItem">X</button> 
      <!-- /ko --> 
      <!-- ko ifnot: itemGroup.items().length > 1 --> 
      <button data-bind="click: function() { $root.VM.removeItemGroup($parent) }">X</button> 
      <!-- /ko --> 
      </li> 
     </ul> 
    </li> 
</ul> 

這工作,但對我來說它不是理想的。這是我的理解,淘汰賽應該幫助我擺脫使用像「function(){$ root.VM.removeItemGroup($ parent)}」的匿名函數,但我不知道如何以另一種方式做到這一點。同樣刪除if和ifnot語句也是很好的清理。

回答

0

我想給我的解決方案itemGroups和物品的

發送指標作爲參數來去除方法。

希望你知道如何發送指數

然後檢查itemGroups

self.remove(itemGroupsIndex,itemsIndex) { 
var itemGroupsLength = self.itemGroups()[itemGroupsIndex].items().length; 
    if(itemGroupsLength = 1) { 

    self.itemGroups.remove(itemGroupsIndex); 

    } 
    else { 

    self.itemGroups()[itemGroupsIndex].items.remove(itemsIndex); 

    } 
}; 
+0

的長度我怎麼在我看來引用此?有沒有可能不使用匿名函數? – BillPull 2013-02-20 15:25:23

+0

不可能。你應該使用這些匿名函數或可見綁定中的任何一個,或者你已經做了什麼 – nav0611 2013-02-26 07:42:55