Backbone模型属性在更新另一个属性时更新

时间:2016-01-29 12:47:09

标签: javascript backbone.js backbone-views backbone-model

这是我的模特:

initialize: function(options) {
                var self= this;
                if(_.isUndefined(options)===false){
                    self.model= new SendAlertsModel();
                    self.loggedInUser = app.user;
                    self.model.set("userList",options.previousTabData.get("userList"));
                    self.model.set("alertUserList",options.previousTabData.get("userList"));
                    self.model.get("alertUserList").push(self.loggedInUser);
                }
            },

内幕:

iif(not isnull(ltrim(rtrim(a))) or not is_spaces(ltrim(rtrim(a))) or ltrim(rtrim(a))!='' or length(ltrim(rtrim(a)))!=0 or ltrim(rtrim(a))!=null or ltrim(rtrim(a))!='NULL'and not isnull(ltrim(rtrim(b))) or not is_spaces(ltrim(rtrim(b))) or ltrim(rtrim(b))!='' or length(ltrim(rtrim(b)))!=0 or ltrim(rtrim(b))!=null or ltrim(rtrim(b))!='NULL',null,ltrim(rtrim(a))).

我在这里遇到的问题是当我将loggedInUser推送到alertUserList数组时,它会自动将相同的loggedInUser推送到userList数组。

请就此提出建议。

由于

1 个答案:

答案 0 :(得分:2)

//create new alerts model
model = new SendAlertsModel();

//assign logged in user to local variable
loggedInUser = app.user;

//set the user list to be the user list from the previous tab data
model.set("userList",options.previousTabData.get("userList"));  

//set the alertUserList to be the previous tab user list by reference
model.set("alertUserList",options.previousTabData.get("userList"));

//push the logged in user into the alert user list
model.get("alertUserList").push(self.loggedInUser);

我认为当您将 alertUserList 设置为 userList 时会出现此问题。由于用户列表是一个对象, alertUserList 现在包含对userList的引用。它不是副本。当您更新 alertUserList 时,您实际上也在更新 userList

这样想:

var alertUserList = userList = {some object in memory};

在这一行中你需要创建一个副本而不是:

model.set("alertUserList",options.previousTabData.get("userList"));

我不确定userList是什么数据类型,因此它将依赖于此。如果你只需要一个浅的副本,那么你可以使用你的下划线/ lodash库(我认为这就是" _"是):

model.set("alertUserList",_.clone(options.previousTabData.get("userList")));