2013-09-26 6 views
6

Gibt es eine vernünftige Art und Weise in einem Modell zwei Felder zu verketten, so etwas wie dieses:ExtJS Modell - Concatenate Felder

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' } 
    ] 
}); 

ich eine Vielzahl von Möglichkeiten versucht haben, scheinen aber kann nicht zu bekommen Arbeit.

Ich würde eine Funktion im Modell verwenden, um die zwei Felder zusammen zu halten, aber ich muss auch dieses als das Anzeigefeld innerhalb eines 'Elementselektors' (benutzerdefiniertes Steuerelement) verwenden und dynamisch umschalten und dieses Steuerelement nicht scheint "FullName()" als Anzeigefeld zu mögen.

Alle Gedanken sehr geschätzt.

Antwort

10

die convert Konfiguration des Ext.data.Field Verwendung: 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') 
    } 
} 

Hier ist ein anschauliches Beispiel: https://fiddle.sencha.com/#fiddle/mf

+0

Perfect, danke für genau das, was ich suchte. Leider merke ich, dass es die neue Eigenschaft anhängt, wenn ich eine Anfrage an den Laden stelle, so dass der zusammengesetzte Wert auf den Draht kommt, was ich zu vermeiden versuchte, egal wie, großartige Antwort. – dougajmcdonald

+0

Um zu verhindern, dass dieses Feld als Teil der Anforderung übergeben wird, fügen Sie der Felddefinition einfach persist: false hinzu. – existdissolve

+0

Korrektur: Die konvertierten Felder kamen nicht herunter, ich hatte meinen Server-Code nicht aktualisiert! – dougajmcdonald