【问题标题】:remove an object from observable array in knockout.js从 knockout.js 中的可观察数组中删除一个对象
【发布时间】:2017-03-07 09:56:51
【问题描述】:

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

我使用 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>

【问题讨论】:

  • 为什么要放弃?我想你的意思是你正在努力,但只是需要一点帮助?
  • 问题是如何表现出来的?你在哪里遇到麻烦?

标签: javascript knockout.js


【解决方案1】:

假设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
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2018-11-26
    • 2018-12-16
    • 2020-12-01
    • 2019-12-16
    相关资源
    最近更新 更多