2013-05-31 6 views
0

Мне нужно заполнить combobox whit store, все отлично работает, кроме одного. ¿Почему в магазине заполняется только displayField, а не valueField.Extjs - Populate combobox whit store не соответствует

В этой строке

form.loadRecord(records[1]); 

Я установил, что запись в форме, это хорошо, но когда я пытаюсь отправить форму я надеюсь, что значение «2», а не значение «Медиа».

Код и пример на Jsfiddle для лучшего объяснения.

http://jsfiddle.net/jjgrn/5/

var store = Ext.create('Ext.data.Store', { 
     fields: ['id', 'status'], 

     data: [ 
       { id: '1', status: 'Baja' }, 
       { id: '2', status: 'Media' }, 
       { id: '3', status: 'Alta' }, 
       { id: '4', status: 'Urgente' } 
     ] 
    }); 

    var formPanel = Ext.create('Ext.form.Panel', { 
     title: 'Edit Country', 
     url: 'http://aaa.com/', 
     items: [ 
      { 
       xtype: 'combobox', 
       fieldLabel: 'Nombre', 
       name: 'status', 
       anchor: '50%',       
       displayField: 'status',    
       valueField: 'id', 
       store: store 
      } 
     ], 
     buttons: [ 
      { 
       text: 'Guardar', 
       handler: function() { 
        var form = formPanel.getForm(); 
        var value = form.getValues(); 

        alert(value.status); 
       } 
      } 
     ], 
     renderTo: Ext.getBody() 
    }); 



    store.load({ 
     scope: this, 
     callback: function(records, operation, success) { 
      var form = formPanel.getForm(); 
      form.loadRecord(records[1]); 
     } 
    }); 

Спасибо.

ответ

0

Это потому, что form.loadRecord() не делает именно то, что вы ожидаете от него. Что вы хотите, так это сообщить combobox, чтобы использовать эту конкретную запись (записи [1]). Что он на самом деле делает, так это сообщить combobox: «теперь установите значение« Media », которое сопутствующее combobox вежливо делает, хотя это слишком« глупо », чтобы связать его с определенной записью.

Вот исправленная версия, не уверен, что такое решение соответствует вашим потребностям: http://jsfiddle.net/jjgrn/6/

var store = Ext.create('Ext.data.Store', { 
    fields: ['id', 'status'], 

    data: [ 
      { id: '1', status: 'Baja' }, 
      { id: '2', status: 'Media' }, 
      { id: '3', status: 'Alta' }, 
      { id: '4', status: 'Urgente' } 
    ] 
}); 

var formPanel = Ext.create('Ext.form.Panel', { 
    title: 'Edit Country', 
    url: 'http://aaa.com/', 
    items: [ 
    { 
     xtype: 'combobox', 
     fieldLabel: 'Nombre', 
     name: 'status', 
     anchor: '50%',       
     displayField: 'status',    
     valueField: 'id', 
     store: store 
    } 
    ], 
    buttons: [ 
    { 
     text: 'Guardar', 
     handler: function() { 
     var form = formPanel.getForm(); 
     var value = form.getValues(); 
     alert(value.status); 
     } 
    } 
    ], 
    renderTo: Ext.getBody() 
}); 



store.load({ 
    scope: this, 
    callback: function(records, operation, success) { 
    // the operation object 
    // contains all of the details of the load operation 
    //var form = formPanel.getForm(); 
    //form.loadRecord(records[1]); 
    formPanel.items.first().select(records[1]); 
    } 
}); 
+0

Я думаю, вы поняли, что 'ComboBox.select()', 'Form.loadRecord()' и ' Form.getValues ​​() 'do. В вашем примере показывается только идентификатор. См. Мой ответ для объяснения. –

0

Когда вы вызываете form.getValues(), вы получаете только значение, если вы хотите связать запись для значения, вам нужно искать в магазине. http://jsfiddle.net/jjgrn/7/

var rec = store.getById(value.status);     
    alert(rec.get('status')); 

Ключ понимания, что getValues() просто вызывает getValue() для каждого поля в форме. getValue не возвращает запись, просто поле из записи, которое вы сказали ему использовать valueField: 'id',.

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