2013-08-21 2 views
0

Я хочу обновить магазин combobox всякий раз, когда есть изменение в выпадающем списке и отображает это измененное хранилище. Мой магазин загружается, но combobox не отображает его. Я могу отображать локальный магазин, как я хочу отображать, но не могу сделать то же самое для удаленного хранилища json.Загрузился магазин Combobox, но не отобразится

У меня есть "ProcessController", как это:

onComboboxChange: function(combo, newValue, oldValue) { 
    var upContainer = combo.up('container'); 

    if(combo.itemId == "cmbServiceList") { 
     MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore(upContainer.getComponent('cmbServiceList').getRawValue()); 
    } 
}, 

createServiceCmbStore: function(inputData){ 
    var data = {"inputData": inputData}; 

    var mainController = MyApp.app.getController('MainController'); 
    var cmbServiceData = mainController.callService(data,'getServices','json'); 
    var classServices = Ext.JSON.decode(cmbServiceData); 

    var projectStore = Ext.create('Ext.data.Store', { 
     fields: ['key', 'text'], 
     data: classServices 
    }); 
    return projectStore; 
} 

init: function(application) { 
    this.control({ 
     'combobox': { 
      change: this.onComboboxChange 
     } 
    }); 
    _myAppGlobal = this; 
}, 

И это мой выпадающий в главном окне просмотра:

{ 
    xtype : 'combobox', 
    anchor : '80%', 
    listConfig : { 
     loadingText : 'Searching...', 
     emptyText : 'No matching posts found.' 
    }, 
    typeAhead : true, 
    itemId : 'cmbServiceList', 
    fieldLabel : 'Servis Adı:', 
    hideTrigger : true, 
    displayField : 'text', 
    store : MyApp.app.globals.cmbServiceStore, 
    valueField : 'key', 
    minChars : 1, 
    queryMode : 'local', 
    forceSelection: true 
} 

MyApp.app.globals.cmbServiceStore глобальная переменная, определенная в app.js

When Я отлаживаю код, я вижу, что магазин загружен, но он не будет отображать какое-либо сохраненное значение в combobox.

+0

, если (combo.itemId == "cmbServiceList") { \t \t MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore (upContainer.getComponent ('cmbServiceList') getRawValue().); upContainer.getComponent ('cmbServiceList'). BindStore (MyApp.app.globals.cmbServiceStore); \t} вместо , если (combo.itemId == "cmbServiceList") { MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore (upContainer.getComponent ('cmbServiceList') getRawValue().); } решена проблема. –

+0

опубликуйте это как ответ :) это нечитаемо, и это на самом деле ответ, может быть, он может помочь другим с подобными проблемами – VDP

+0

Прости, что я пробовал, но на сайте говорится: «Вы не можете ответить на свой вопрос через 8 часов» –

ответ

0

Проблема главным образом в том, что когда вы создаете комбобокс, MyApp.app.globals.cmbServiceStore имеет значение null или undefined, после того, как вызывается combobox, а затем вы пытаетесь определить свой магазин, это не поле со списком в качестве ссылки заданное во время инициализации для combobox, не определено.

На основании вашего кода кажется, что вы просто меняете данные магазина, а не поля магазина. Поэтому гораздо лучше вы создаете хранилище перед инициализацией combobox, а затем при изменении combox вы просто добавляете данные для хранения с помощью store.add

Я бы рекомендовал другой подход, то есть добавить прокси-сервер в ваш магазин для обслуживания и вобще store.load() на изменение комбо

+0

Спасибо за ваш совет, но в начале я определил MyApp.app.globals.cmbServiceStore как null, а затем, когда есть изменение, я изменил хранилище с заданным значением. Храните загруженные файлы, как я могу видеть на отладочном, но combobox не смог отобразить это хранилище. –

0
if(combo.itemId == "cmbServiceList") { 
     MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore(upContainer.getComponent('cmbServiceList').getRawValue()); 
     upContainer.getComponent('cmbServiceList').bindStore(MyApp.app.globals.cmbServiceStore); 
    } 

вместо

if(combo.itemId == "cmbServiceList") { 
    MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore(upContainer.getComponent('cmbServiceList').getRawValue()); 
} 

решить эту проблему.

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