我试图在飞行中更改dijit / form / select的商店。为此,我需要从服务器检索商店。我需要将这个商店保存在一些临时商店中,并在我的代码中对临时商店进行更改。
在我的下面的代码中,requiredStore具有从服务器接收的数据。 我需要创建一个新的临时存储,在我的例子中就是临时存储,可以在requiredStore中分配数据。(而不是临时存储是对requiredStore的引用)这样,当我删除/更改临时存储中的值时,requiredStore不会受到影响。以下是我用过的代码。
function getDropDownContents() {
require([
"dojo/store/Memory",
"dijit/form/Select",
"dojo/data/ObjectStore",
"dojo/request",
"dojo/domReady!"
],
function (Memory, Select, ObjectStore, request) {
var os;
var def = new dojo.Deferred();
dojo.xhrGet({
url: "pageToGetValues.aspx",
handleAs: "json",
load: function (res) {
requiredStore = new Memory({ data: res });
temporaryStore = requiredStore;
getOptionsToSelect('dropdown1');
var select = dijit.byId('dropdown1');
select.on('change', function (evt) {
getOptionsToSelect('dropdown2');
});
myFormDialog.show();
}
});
});
}
但是,我不知道,我没有遵循什么javaScript原则,因为当我更改临时存储时,requiredStore也会发生变化。
答案 0 :(得分:0)
您需要深入克隆requiredStore(通过属性和原型来创建完美的副本),或者只需创建一个不同的内存存储:
requiredStore = new Memory({ data:res });
temporaryStore = new Memory({ data: res });
我不知道为什么你不会使用这种方法,但如果你想做一个深度克隆,这个问题会有所帮助:
What is the most efficient way to deep clone an object in JavaScript?