2016-01-20 62 views
0

我有两个窗口。在第一个窗口中,我有下面的JSON。我使用Alloy.createController(“set_schedule”,{“data”:data})将此JSON从第1个窗口传递到第2个窗口。在第二个窗口中,我将数据推送到插槽,它正在修改第一个窗口的原始JOSN。我不想要这个。它不应该修改原始数据。我已经尝试将args.data存储到局部变量,然后操作,没有任何工作。在第二个窗口中修改JSON会在第一个窗口中修改原始的JSON

schedule.js

var data = [{ 
    "day" : "monday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "tuesday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "wednesday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "thursday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "friday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "saturday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "sunday", 
    "slots" : [], 
    "duration" : 0 
}] 

var win = Alloy.createController("set_schedule", { 
    "data" : data 
}).getView("setSchedule"); 
win.open(); 

set_schedule.js

var scheduleData = args.data; //copy to local variable 
scheduleData[0].slots.push({"start": "09:00:00", 
    "finish": "17:00:00"}); 

现在我关闭set_schedule窗口,然后回来安排窗口它显示

var data = [{ 
    "day" : "monday", 
    "slots" : [{"start": "09:00:00", 
    "finish": "17:00:00"}], 
    "duration" : 0 
}, { 
    "day" : "tuesday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "wednesday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "thursday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "friday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "saturday", 
    "slots" : [], 
    "duration" : 0 
}, { 
    "day" : "sunday", 
    "slots" : [], 
    "duration" : 0 
}] 
+0

你能分享一些代码示例吗? – Sebastian

回答

3

传递的对象是byref,因为它是一个对象。你应该做的是,反对新的JSON对象克隆:

var newJsonObj = JSON.parse(JSON.stringify(data)); 

注意 - 它可能不是最适合你的解决方案(我不知道你的业务逻辑是什么)。

0

请问一个可能的解决方案是将JSON传递给第二个窗口,然后在另一个窗口上解析JSON时将其串联化侧。这将确保它不是您操作的同一个对象。

看来你的代码正在创建一个有效的ByRef参数调用(对象的引用被发送而不是JSON对象本身)的情况。

相关问题