【问题标题】:Ext JS empty ItemSelector when loaded for the First time from a JSON response第一次从 JSON 响应加载时,Ext JS 为空 ItemSelector
【发布时间】:2012-05-27 23:47:06
【问题描述】:

我正在使用 extjs 4 创建一个带有 Itemselector 的表单。我正在使用 Json 存储我的 JSON 响应如下:

{"items":[{"id":"12","name":"Cable"},{"id":"8","name":"Document"},{"id":"1","name":"Equipment"},{"id":"2","name":"Instrument"},     {"id":"10","name":"Isometric"},{"id":"11","name":"Joint"},{"id":"4","name":"Line"},{"id":"3","name":"LineSeg"},{"id":"5","name":"Specialty"},{"id":"6","name":"Spool"},{"id":"7","name":"Valve"},{"id":"9","name":"Weld"}]}

我的表格

Ext.require([
        'Ext.ux.form.MultiSelect',
        'Ext.ux.form.ItemSelector'
        ]);


Ext.define('MyAPP.view.directory.MyForm', {
    extend: 'Ext.form.Panel',
alias:'widget.myform',
    border: false,
    split: true,
bodyPadding: 5,
lableWidth:30,
autoScroll : true,
defaults: {
    anchor: '100%'

},
defaultType: 'textfield',
items: [
    {
xtype:'fieldset',
title: 'Commodities',
collapsible: true,
border:0,
defaultType: 'textfield',
defaults: {anchor: '100%'},
layout: 'anchor',
items :[
      {
        xtype: 'itemselector',
        name: 'commoselector',
        id:'commoselector',
        listAvailable:'',
        listSelected:'',
        fieldLabel: '',
        imagePath: 'extjs407/ux/css/images/',
        store: Ext.create('MyAPP.store.CommodityStore'),
        displayField: 'name',
        valueField: 'id',
        //value: ['9'],
        //allowBlank: false,
        msgTarget: 'under'
      }
 ]
},



 initComponent: function () {
    this.callParent(arguments);
}
});

我的商店

 Ext.define('MyAPP.store.CommodityStore', {

  extend: 'Ext.data.Store',

 constructor: function(cfg) {

 var me = this;
 cfg = cfg || {};
 me.callParent([Ext.apply({
     autoLoad: true,
     autoDestroy: true,
     storeId: 'CommodityStore',
     proxy: {
        type: 'ajax',
        url: 'getCommodityList',
        reader: {
            type: 'json',
            root: 'items'
        }
    },
    fields: [
            {name: 'id'},
            {name: 'name'}
    ]
   }, cfg)]);
  }
   });

尽管 JSON 是正确的,但创建表单时它不会加载空白存储。哪里做错了?请帮忙。在此先感谢

【问题讨论】:

    标签: extjs extjs4 ext4 jsonstore itemselector


    【解决方案1】:
    initComponent: function () {
    var me = this;
    Ext.applyIf(me, {
        listeners: {
        beforerender: {
                fn: me.onFormBeforeRender,
                scope: me
            }
       }
    });
    
    me.callParent(arguments);
    
    },
    
    onFormBeforeRender: function(abstractcomponent, options) {
            // where store is created globally like this var store =          Ext.create('TIP.store.CommodityStore');
    
    store.load(function(){
        Ext.getCmp("commoselector").bindStore(store);
    });
    }
    

    并且在存储中 autoLoad:false

    【讨论】:

      【解决方案2】:

      您不需要像store: Ext.create('MyAPP.store.CommodityStore'), 那样手动创建商店

      您通常只需输入store: 'CommodityStore',ExtJs 会自动完成剩下的工作。

      【讨论】:

      • Sha 感谢您的回复.. 但是我调试了因为服务器的响应需要时间所以这个商店是空白的.. 当我对 json 进行硬编码时,它会正确填充数据.. 所以 wat 可以是解决方案吗?
      • 您应该为商店的load 事件添加事件处理程序并在那里分配所有数据。
      • 我通过使用 beforerender 侦听器并绑定存储来解决此问题。更多详情请看:stackoverflow.com/questions/9661503/…
      • 这也行。但那里的关键 - 等到商店加载
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      相关资源
      最近更新 更多