ExtJS 7 TagField: фантомное свойство отсутствует в выбранных записях в прослушивателе beforeselectJavascript

Форум по Javascript
Ответить
Anonymous
 ExtJS 7 TagField: фантомное свойство отсутствует в выбранных записях в прослушивателе beforeselect

Сообщение Anonymous »

Я работаю с ExtJS 7 и использую tagfield, поддерживаемое хранилищем.
В прослушивателе beforeselect, когда я выбираю запись и записываю ее, я замечаю, что фантомное свойство отсутствует в записи.
Согласно официальной документации Sencha, фантом должен существовать на Ext.data.Model (https://docs.sencha.com/extjs/7.3.0/cla ... ty-phantom).
Мой вариант использования заключается в том, что мне нужно различать:
  • Выбранные элементы (поскольку он поступает из хранилища, это Ext.data.Model экземпляр, что означает, что он включает в себя фантомное свойство)
  • Введенные элементы (вводятся пользователем вручную, поэтому это простой объект)
Это различие важно, поскольку я хочу обеспечить соблюдение правила:
  • Разрешить до 2 выбранных элементы
  • Разрешить только 1 типизированный элемент
Итак, мой вопрос: почему фантомное свойство недоступно для записей, выбранных из хранилища в поле тега? И как в этом сценарии рекомендуется различать выборки, выбранные в магазине, и записи, введенные пользователем?
Заранее спасибо.
Ext.define('My.Component.MyModel', {
extend: 'Ext.data.Model',

idProperty: 'code',
fields: ['code', 'name', 'type'],

});

Ext.define('My.Component.View', {
extend: 'Ext.window.Window',

/**
*** code and configurations ***
**/

items: [{
xtype: 'tagfield',
bind: {
store: '{MyStore}'
}
store: MyStore,
listeners: {
beforeSelect: function(_field,record){
console.log(record); // no phantom property displayed in the console
}
}

}]
});

Ext.define('My.Component.MyViewModel', {
extend: 'Ext.app.ViewModel',

data: {},
formulas: {},
stores: {
MyStore: {
model: 'My.Component.MyModel',
proxy: {
type: 'memory',
}
}
}

});

Ext.define('My.Component.MyViewController', {
extend: 'Ext.app.ViewMController',

initViewModel: function(vm){
const myObject = [{code: 'c1', name: 'code1', type: 'type1'},
{code: 'c2', name: 'code2', type: 'type2'},
{code: 'c3', name: 'code3', type: 'type3'}];
vm.getStore('MyStore').loadData(myObject);
}

});


Подробнее здесь: https://stackoverflow.com/questions/798 ... reselect-l
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»