2011-04-04 2 views
2

У меня есть форма с комбинированным ящиком. Комбинированный блок загружает данные через хранилище Json, и я использую form.getForm(). Load (url: 'URL') для загрузки данных форм из магазина Json.В ExtJS делает getForm(). Load() загружает значения полей combo?

Когда данные загружаются в форму, я вижу через Firebug, что он получает правильное значение, комбо показывает соответствующее соответствующее отображаемое значение. Когда я смотрю на HTML в FireBug для hiddenField, он говорит значение = "DISPLAYVALUE" not value = "VALUE". Когда я выбираю любое значение из комбо, оно изменяется на правильное значение = «VALUE».

Конечно, если пользователь никогда не изменяет комбо, отправляется неправильное значение. Это по дизайну/ограничению, или я что-то упускаю.

Нужно ли мне действительно загружать и проверять данные для каждой комбо, прежде чем я получу getForm(). Load()? не было бы ли смысл загрузки() просто загружать полные данные, даже если это означает загрузку данных из магазина?

Я включил упрощенный образец кода, в котором есть проблема.

Ext.onReady(function(){ 

    var frmClientRecord = { 
     xtype: 'form', 
     items: [ 
      { 
       fieldLabel: 'Advisor', 
       xtype: 'combo', 
       id: 'advisorName', 
       displayField: 'Advisor', 
       valueField: 'advisorId', 
       hiddenName: 'advisorsId', 
       mode: 'remote', 
       store: new Ext.data.Store({ 
        autoLoad: true, 
        proxy: new Ext.data.HttpProxy({ 
         url: '/referrals/index.php/advisors/read', 
         method: 'POST' 
         }), 
        reader: new Ext.data.JsonReader({ 
         root: 'results', 
         fields: [ 
          {name: 'advisorId'}, 
          {name: 'Advisor'} 
         ] 
        }) 
       }) 
      } 
     ] 
    } 

    frmClientRecordCmp = new Ext.FormPanel(Ext.apply(frmClientRecord)); 


    frmClientRecordCmp.getForm().load({ 
     url: '/referrals/index.php/clients/getbyid/100', 
    }) 

    frmClientRecordCmp.render(document.body); 
}); 

JSON ДЛЯ COMBO

({"results":[{"Advisor":"Chris","advisorId":33},{"Advisor":"Fawzia","advisorId":2},{"Advisor":"Kent","advisorId":3},{"Advisor":"Rob","advisorId":4},{"Advisor":"Stephanie","advisorId":5}]}) 

JSON для формы

{success: true, data: {"advisorsId":33}} 
+0

btw, хорошая работа, задающая ваш вопрос вокруг «упрощенного образца кода» –

ответ

1

Это может произойти, если ваша форма загружается перед тем комбо-магазин нагрузок. (Учитывая, что остальная часть вашего кода выглядит нормально)

Я подозреваю, что это решит, если вы отформоруете свою форму перед ее загрузкой.
(перемещение frmClientRecordCmp.render(document.body); одно утверждения в примере коде)

EDIT
Две точки на существен

  1. Вы уверен комбо магазин имеет закончил загрузки перед формой нагрузок?
  2. Если посмотреть на документацию ComboBox's valueField, это выглядит как вызов combo.setValue может потребоваться после загрузки формы. . Что-то вдоль линий -

    frmClientRecordCmp.getForm() нагрузка ({ URL: '/referrals/index.php/clients/getbyid/100', успех: функция (форма, действие) { форма. findField ('advisorName'). setValue (action.result.data.advisorId); } });

+0

К сожалению, это не сработало. После изменения его для рендеринга, затем загрузки, когда я загружаю страницу, я все еще вижу скрытое значение комбо как «Крис», а не «33». – Chris

+0

Благодарим за помощь. Мои извинения, но это была проблема, которую я вызвал. – Chris

0

Это была проблема, которую я вызвал с помощью id: 'advisorName'. Я возвращал поле, также называемое «advisorName», поэтому оно заполняло его, даже если я указывал значение hiddenName. Мораль - убедиться, что ваш идентификатор уникален, а не имя поля.

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