0

dijit/form/select のストアをその場で変更しようとしています。そのためには、サーバーからストアを取得する必要があります。このストアを一時ストアに保存し、コードで一時ストアに変更を加える必要があります。

以下のコードでは、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の原則はわかりません.coz、temporaryStoreを変更すると、requiredStoreも変更されます。

4

1 に答える 1

0

requiredStore のディープ クローンを作成する (プロパティとプロトタイプを使用して完全な複製を作成する) か、別のメモリ ストアを完全に作成する必要があります。

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

このアプローチを使用しない理由はわかりませんが、ディープクローンを作成したい場合は、次の質問が役立ちます。

JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?

于 2013-08-12T19:53:29.247 に答える