2013-03-22 4 views
3

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

var scopename = newScopeRef.down('textfield[id=scope_name]').getValue(); 
    var prodname = newScopeRef.down('combobox[id=prd]').getRawValue(); 
    var relname = newScopeRef.down('combobox[id=p_rls]').getRawValue(); 


var editscopegrid = newScopeRef.down('gridpanel[id=editedscope_grid]'); //my grid 
    editscopegrid.getView().getStore().removeAll(); 
    editscopegrid.getView().getStore().add({ 
         name_scope : scopename, 
         prodrel : concat(prodrel + ',' prodname + ' ' + relname)}); 
    editscopegrid.getView().refresh(); 

Как вы можете видеть, что я хотел бы concatenante существующего значения столбца prodrel сетки с значениями Наримера prodname и relname, разделенного пробелом.

Я использую Extjs 4.x с архитектурой MVC, выше - обработчик события щелчка кнопки «обновление» на моей панели.

Как я могу это сделать, пожалуйста?

+0

Может быть, я что-то в этом вопросе не хватает, но не нужна функция для конкатенации строки в Javascript , вы используете 'concat'. Просто используйте оператор '+'. Если я не пропущу то, о чем это Q, это единственная проблема с приведенным выше кодом. – Geronimo

ответ

3

Если у вас есть явное определение модели, вы можете добавить поле prodrel с помощью функции convert и выполнить конкатенацию там.

Ext.define('MyModel', { 
    extend : 'Ext.data.Model', 
    fields : [ 
     'name_scope', 
     'prodname', 
     'relname', 
     { 
      name : 'prodrel', 
      convert : function (v, rec) { 
       return rec.get('prodname') + ' ' + rec.get('relname'); 
      } 
     } 
    ] 
} 

Затем можно добавить экземпляр в ваш магазин, как так ...

editscopegrid.getView().getStore().add({ 
         name_scope : scopename, 
         prodname : prodname, 
         relname : relname}); 
Смежные вопросы