Модель клона sapUi5 json и прекратить связывание - PullRequest
0 голосов
/ 28 сентября 2018

Я видел похожий вопрос, но в моем случае он не работает.У меня есть модель JSON, называемая данными, которая соответствует форме SAPUi5 с выпадающими списками.Я хочу скопировать состояние модели при первом открытии приложения и сохранить его таким образом.После этого я хочу использовать его, чтобы сбросить форму и вернуть комбинированные списки к значениям по умолчанию.Когда я впервые запускаю приложение:

this.getView().setModel(new JSONModel(data)); //create the original model

//copy the original model (copyModel is global variable
copyModel = $.extend({}, data); 

Пока здесь все в порядке.Две модели абсолютно одинаковы.После этого у меня есть кнопка и функция сброса:

resetP: function(){

     this.getView().setModel(new JSONModel(copyModel));
     console.log(copyModel);
     }

При первом выборе чего-либо в выпадающих списках, нажатии кнопки сброса и запуске функции сброса правильная модель копирования.То же самое с исходной моделью данных.Когда я снова изменяю выбранное значение комбинированного списка, copyModel начинает принимать выбранное значение.Каким-то образом это перезаписывается.Я не знаю, что я делаю не так.Есть какие-нибудь предложения?Я также пытался использовать JSON.strignify вместо exten.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Мы используем jQuery.extend(true, {}, object_to_copy); таким образом, чтобы создать «глубокую копию» из объекта, от которого мы хотим получить независимую копию.

0 голосов
/ 28 сентября 2018

Модели JSON по умолчанию имеют двухстороннее связывание.Поэтому, когда вы запускаете такие события, как selectionChange, в ComboBox, из-за двухстороннего связывания установленные данные для модели постоянно обновляются.Также Javascript имеет объекты по ссылке, так что это оригинальный объект copyModel, который обновляется.

Вы можете предотвратить это, установив копию copyModel для модели JSON.

Еще одна вещь, которую я хотел бы упомянуть, это то, что не продолжайте устанавливать модель снова и снова.Вы можете просто обновить данные, установленные для модели, и обновить модель.Это можно сделать двумя способами.

a.

resetP: function(){
                this.getView().getModel().setData(copyModel);
                console.log(copyModel);
            }

б.Вы также можете обновить обязательное свойство и сделать

this.getView (). GetModel (). UpdateBindings ();

...