从knockout.js中的observable数组中删除一个对象

时间:2017-03-05 19:36:31

标签: javascript knockout.js

我试图从可观察的数组中删除一个对象,但我放弃了。

我使用knockout.js和devextreme。

如何从数组中删除对象?

javascript

    CaptionViewOptions: {
        items: self.FunctionsList,
        showCheckBoxesMode: true,
        height: 400,
        searchValue: self.searCachInput,
        parentIdExpr: "ID",
        keyExpr: "ID",
        displayExpr: "ControlCaption",

        onItemSelectionChanged:
           function (s) {

               self.selfID();
               self.Control();
               self.selfID(s.itemData.ID);
               self.Control(s.itemData.Control);

               if (s.itemData.selected === true) {

                var item = {selfID:self.selfID() ,Control:self.Control() }
                self.SelectedFunction.push(item);


               }
               else {
                   var itemstodelete = { selfID: self.selfID(), Control: self.ControlCaption() };
                   SelectedFunction.remove(itemstodelete);

               }
           }

html

 <div data-bind="dxTextBox:vm.SubViewModel.CaptionSearchOptions"></div>

1 个答案:

答案 0 :(得分:0)

假设SelectedFunction是一个数组,您尝试删除的值在数组中不存在,因为您正在创建一个全新的对象。即使对象中的值与存在的值相同,它也不是同一个对象,并且永远不会与数组中的那个“相等”。

请参阅:Object equality in javascript

您必须通过手动比较值来更改代码以搜索现有对象。

...
else {
    //var itemstodelete = { selfID: self.selfID(), Control: self.ControlCaption() };
    for(var i=0; i<SelectedFunction.length; i++){
        if(SelectedFunction[i].selfID === self.selfID() && SelectedFunction[i].Control === self.ControlCaption()){
            SelectedFunction.remove(SelectedFunction[i]); //this can be rewritten to remove via the index to be more efficient
        }
    }
}