如何将变量值分配给另一个变量而不是引用dojo javascript

时间:2013-08-12 19:39:28

标签: javascript dojo

我试图在飞行中更改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也会发生变化。

1 个答案:

答案 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?