Knockout.js 从ObservalArray中删除对象

Knockout.js 从ObservalArray中删除对象,knockout.js,Knockout.js,我在移除可观察阵列中的对象时遇到问题。我有一个removietemfromqueue函数,可以从队列中删除所选对象 显示如果向队列中添加一组项目,然后删除一个,则会删除所有项目: 项目: 队列: 通过 从页面中删除 添加到队列 通过 从队列中删除 这是Javascript: function Item(title, description) { this.title = ko.observable(title); this.description = ko.obse

我在移除可观察阵列中的对象时遇到问题。我有一个
removietemfromqueue
函数,可以从队列中删除所选对象

显示如果向队列中添加一组项目,然后删除一个,则会删除所有项目:

项目:
    队列:
    • 通过 从页面中删除 添加到队列
    • 通过 从队列中删除
    • 这是Javascript:

      function Item(title, description) {
          this.title = ko.observable(title);
          this.description = ko.observable(description);
      }
      
      var viewModel = {
          items: ko.observableArray([
              new Item("one", "one description")
          ]),
          queue: ko.observableArray([]),
          addItemToQueue: function (item) {
              this.queue.push(item);
          },
          removeItemFromPage: function (item) {
              this.items.remove(item);
          },
          removeItemFromQueue: function (item) {
              this.queue.remove(item);
          }
      };
      
      ko.applyBindings(viewModel);
      
      function Item(title, description) {
          this.title = ko.observable(title);
          this.description = ko.observable(description);
      }
      
      var viewModel = {
          items: ko.observableArray([
              new Item("one", "one description")
          ]),
          queue: ko.observableArray([]),
          addItemToQueue: function (item) {
              this.queue.push(ko.toJS(item));
          },
          removeItemFromPage: function (item) {
              this.items.remove(item);
          },
          removeItemFromQueue: function (item) {
              this.queue.remove(item);
          }
      };
      
      ko.applyBindings(viewModel);
      
      我在
      addItemToQueue
      函数中发现使用
      ko.toJS(item)

      项目:
      
        队列:
        • 通过 从页面中删除 添加到队列
        • 通过 从队列中删除
        • 这个Javascript:

          function Item(title, description) {
              this.title = ko.observable(title);
              this.description = ko.observable(description);
          }
          
          var viewModel = {
              items: ko.observableArray([
                  new Item("one", "one description")
              ]),
              queue: ko.observableArray([]),
              addItemToQueue: function (item) {
                  this.queue.push(item);
              },
              removeItemFromPage: function (item) {
                  this.items.remove(item);
              },
              removeItemFromQueue: function (item) {
                  this.queue.remove(item);
              }
          };
          
          ko.applyBindings(viewModel);
          
          function Item(title, description) {
              this.title = ko.observable(title);
              this.description = ko.observable(description);
          }
          
          var viewModel = {
              items: ko.observableArray([
                  new Item("one", "one description")
              ]),
              queue: ko.observableArray([]),
              addItemToQueue: function (item) {
                  this.queue.push(ko.toJS(item));
              },
              removeItemFromPage: function (item) {
                  this.items.remove(item);
              },
              removeItemFromQueue: function (item) {
                  this.queue.remove(item);
              }
          };
          
          ko.applyBindings(viewModel);
          
          有更简单的方法吗


          此外,这里的购物车示例似乎使用了与我的第一个示例类似的代码,但在删除项目时不会遇到相同的问题。我有点困惑。

          您遇到的问题是,您多次将同一项添加到队列数组中

          observableArray的
          remove
          功能将删除传递给它的项目的所有副本

          toJS是获取数据的干净副本的一种方法。然而,如果你需要的话,你会失去任何可观察的东西

          否则,您可能需要执行以下操作:

          this.queue.push(新项目(Item.title(),Item.description())
          或编写一个函数,帮助您复制项目(传入项目并返回新项目)。

          以下是购物车示例: