2015-03-18 6 views
1

Я хочу скрыть флажок в зависимости от того, что запись фантом. Попытка реализовать это с использованием моделей viewmodels, но, похоже, не работает. См. Ниже соответствующий код. Для краткости я оставил несвязанный код. Связывание viewModel с представлением работает должным образом. Когда я пытаюсь связать activeRecord.name с атрибутом title, двухсторонняя привязка данных работает правильно.ViewModel bind record phantom

ViewModel

Ext.define('MyApp.view.content.ContentViewModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.content', 

    data: { 
     activeRecord: null 
    } 
}); 

Контроллер

var contentWindow = Ext.widget('content-details'); 
contentWindow.getViewModel().set('activeRecord', contentBlock); 

Посмотреть

viewmodel: 'content', 
items: [ 
    { 
     xtype: 'checkbox', 
     boxLabel: 'My checkbox', 
     bind: { 
      hidden: '{!activeRecord.phantom}' 
     } 
    } 
] 

ответ

0

Попробуйте использовать формулы:

data: { 
    rec: null, 
    callback: null 
}, 

formulas: { 
    isNew: function (get) { 
     return !get('rec') || get('rec').phantom; 
    } 
} 

Затем на ваш взгляд:

bind: { 
    disabled: '{!isNew}' 
}, 
0

Мы закончили с использованием следующего базового класса для модели, которая более удобна, чем формула в ViewModel.

// Use your own name instead of BaseModel 

Ext.define('BaseModel', { 
    extend: 'Ext.data.Model', 

    fields: [{ 
     name: 'phantom', 
     persist: false, 
     convert: function (v, rec) { 
      var id = rec.data[rec.idProperty]; 
      return !id || (Ext.isString(id) && id.indexOf(rec.entityName) == 0); 
     } 
    }], 

    commit: function (silent, modifiedFieldNames) { 
     this.data.phantom = false; 
     this.callParent(arguments); 
    } 
}); 

Тогда вы будете иметь возможность использовать связывание вы хотите

bind: { 
     hidden: '{!activeRecord.phantom}' 
    }