2013-09-26 6 views
6

Существует ли разумный способ в модели для конкатенации двух полей, что-то вроде этого:ExtJS Модель - Соединить поля

Ext.define('model.Person', { 
    extend: 'Ext.data.Model', 
    idProperty: 'Id', 
    fields: [ 
     { name: 'Id', type: 'int' }, 
     { name: 'FirstName', type: 'string' }, 
     { name: 'LastName', type: 'string' }, 
     { name: 'FullName', type: 'string', mapping: 'FirstName + " " + LastName' } 
    ] 
}); 

Я пробовал множество способов, но не похоже, чтобы получить какой-либо к Работа.

Я собирался использовать функцию в модели, чтобы совместить два поля вместе, но мне также нужно использовать это как поле отображения внутри элемента itemselector (настраиваемый элемент управления) и переключать его динамически, и этот элемент управления не работает похоже, как «FullName()» в качестве поля отображения.

Любые мысли очень ценятся.

ответ

10

Используйте convert конфигурации из Ext.data.Field: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.Field-cfg-convert

{ name: 'FirstName', type: 'string' }, 
{ name: 'LastName', type: 'string' }, 
{ 
    name: 'FullName', 
    type: 'string', 
    convert: function(v, record) { 
     return record.get('FirstName') + ' ' + record.get('LastName') 
    } 
} 

Вот живой пример: https://fiddle.sencha.com/#fiddle/mf

+0

совершенны, спасибо за это именно то, что я искал. К сожалению, я замечаю, что добавляет новое свойство при обращении в магазин, поэтому составное значение сводится к тому, что я пытался избежать, в любом случае, отличный ответ. – dougajmcdonald

+0

Чтобы предотвратить отправку этого поля в качестве части запроса, просто добавьте persist: false в определение поля. – existdissolve

+0

Исправление: конвертированные поля не спускались по проводам. Я не обновил код на стороне сервера! – dougajmcdonald

Смежные вопросы