0

我正在尝试即时更改 dijit/form/select 的存储。为此,我需要从服务器检索存储。我需要将此商店保存在某个临时商店中,并在我的代码中对临时商店进行更改。

在我下面的代码中, requiredStore 具有从服务器接收到的数据。我需要创建一个新的临时存储,在我的情况下是temporaryStore,它可以在requiredStore 中分配数据。(而不是temporaryStore 是对requiredStore 的引用)因此,当我删除/更改temporaryStore 中的值时,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 原则,因为当我更改temporaryStore 时,requiredStore 也发生了变化。

4

1 回答 1

0

您需要对 requiredStore 进行深度克隆(通过属性和原型创建完美副本),或者完全创建一个不同的内存存储:

requiredStore = new Memory({ data:res });
temporaryStore = new Memory({ data: res });

我不知道你为什么不使用这种方法,但如果你想做一个深度克隆,这个问题会有所帮助:

在 JavaScript 中深度克隆对象的最有效方法是什么?

于 2013-08-12T19:53:29.247 回答