Ext JS 6.2 Проблема с привязкой модели вида при обновлении - PullRequest
0 голосов
/ 25 марта 2020

У меня проблема в Ext JS 6.2 при привязке модели представления. Я хочу обновить свою модель автоматически при отправке формы. Это модель моего вида:

 Ext.define('..model.OperationProperty', {    
    idProperty: 'ObjectID',    
    binding: {
        deep: true
    },    
    fields: [
        {
            name: 'ID',
            type: 'integer'
        },
        {
            name: 'Operation',
            type: 'auto'
        },
        {
            name: 'OperationForInvoice',
            type: 'auto'
        }
    ]
});

Operation и OperationForInvoice - это разные модели.

Я загружаю данные успешно, как;

viewmodel.setData({
        operationproperty: operationproperty
          });

 operationproperty.load();

, и это мой флажок внутри Контейнер.

{
xtype: 'container',
layout: {
    type: 'vbox',
    pack: 'center',
    align: 'middle'
},
items: {
   xtype: 'checkbox',
   bind: {
        data: {
           value: '{operationproperty.Operation.IsExplanationNecessary}',
           deep: true
        }
   }
         //bind: "{operationproperty.Operation.IsExplanationNecessary}",
         //deep: true,
         //bind: {
         //    value: "{showIsExplanationNecessary}"
         //}
         //bind: {
         //    Operation: {
         //        bindTo: '{operationproperty.Operation.IsExplanationNecessary}',
         //        deep: true
         //    }
         //}
}

и viewmodel выглядит хорошо после загрузки данных. Модели Operation и OperationForInvoice загружены, и мой флажок выглядит отмеченным. Но когда я делаю что-то в своей форме, например сниму флажок, изменение не отображается в модели представления, а объект «Операция» появляется внизу модели представления, в который входит только измененный элемент. Я добавил снимок экрана

Я также ищу "deep: true", но он не работает, или я не могу найти правильный способ его использования. И я попытался использовать формулу в модели представления, я показываю тот же результат, он дает тот же результат.

formulas: {

    showIsExplanationNecessary: {
        bind: {
            bindTo: '{operationproperty.Operation.IsExplanationNecessary}',
            deep: true
        },

        get: function (get) {
            return get;
        },

        set: function (value, type) {
            debugger;
            this.set('operationproperty.Operation.IsExplanationNecessary', value);  //not set the field and add Operation object again
        }
    }

}

Я надеюсь, что кто-то поможет, спасибо.

1 Ответ

1 голос
/ 26 марта 2020

Я исправил проблему, изменив часть набора формул. Новая формула будет выглядеть так:

showIsExplanationNecessary: {

        get: function (get) {
            var operation = get('operationproperty.Operation');

            if (operation == null || operation.IsExplanationNecessary == null)
                return false;

            if (operation.IsExplanationNecessary != null) {
                return operation.IsExplanationNecessary;
            }

            return false;
        },

        set: function (value, type) {
            this.getData().operationproperty.getData().Operation.IsExplanationNecessary = value;
        }
    }

Если для этой проблемы существует другое решение, пожалуйста, сообщите мне. Спасибо за ваше время.

...