代码之家  ›  专栏  ›  技术社区  ›  THI

将数组结果从一个JSON对象移动到另一个JSON对象

  •  1
  • THI  · 技术社区  · 6 年前

    我在初始化数据中创建了一个新的JSON数据模型。目的是当用户试图删除购物车中的项目时,我希望将该项目存储在此新数据模型中。所以,单击删除按钮,我将读取包含购物车中所有项目的JSON数据模型,然后使用删除元素的索引将结果复制到新模型中。如果我只删除一个项目,它就可以工作。但是,如果我在另一个项目上按“删除”,新模型中的前一个条目将被新条目重写。它不像数组那样保存所有条目。

    _initializeData: function () {
            var removedData = {};  // new model for removed parts
            removedData.removedParts = [];
            this.removedItems = new JSONModel(removedData);
            this.getView().setModel(this.removedItems, "removedItems");
     }
    
    // button click
    onRemovePart: function (oEvent) {  
            var idx = this.getView().byId("table").getSelectedIndex();
    
            // retrieveing the model which has all the parts from the table 
            var data = this.getView().getModel("materialData").getProperty("/partsData");
    
            // reading the removed item data 
            var removedPart = data[idx];
    
            // assigning it to the new model. But it does not hold multiple 
            entries rather over-writes the previous one
            this.getView().getModel("removedItems").setProperty("/removedParts", removedPart);
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Rahul Bhardwaj    6 年前

    问题是您正在覆盖模型上的完整对象:removeditems。

    由于覆盖了它,旧数据将丢失。所以,您所需要做的就是获取旧的已移除项数组,将元素推入其中,然后将其设置为模型。

       _initializeData: function () {
            var removedData = {};  // new model for removed parts
            removedData.removedParts = [];
            this.removedItems = new JSONModel(removedData);
            this.getView().setModel(this.removedItems, "removedItems");
     }
    
    // button click
    onRemovePart: function (oEvent) {  
            var idx = this.getView().byId("table").getSelectedIndex();
    
            // retrieveing the model which has all the parts from the table 
            var data = this.getView().getModel("materialData").getProperty("/partsData");
    
            // reading the removed item data 
            var removedPart = data[idx];
    
            // assigning it to the new model. But it does not hold multiple 
            entries rather over-writes the previous one
            // Get the old deleted items first :
            var oDeletedItems = this.getView().getModel("removedItems").getProperty("/removedParts");
            oDeletedItems.removedParts.push(removedPart); // the array is removedParts and oDeletedItems is the obejct which stores the array as per _initlaise method
            this.getView().getModel("removedItems").setProperty("/removedParts", oDeletedItems);
    

    希望这有帮助。

        2
  •  1
  •   Jithil P Ponnan    6 年前

    使用 Array.slice() 避免引用。在这里,引用导致覆盖行为