2016-01-20 50 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對象本身)的情況。

相關問題