2011-10-03 74 views
0

我可以使用setOptions方法成功地指定一个选择栏的选项如下:如何使用选择字段的setOptions方法与商店

setOptions(
[ {text: 'First Option', value: 'first'}, 
{text: 'Second Option', value: 'second'}, 
{text: 'Third Option', value: 'third'} 
]) 

但是,我反而喜欢setOptions同一个工作加载数据存储,而不是像上面那样对文本/值数组进行硬编码。

该商店有一个项目类型在它的'车辆'和加载它的服务器的JSON响应形式为{'vehicle':'mercedes'},{'vehicle''jaguar'}(忽略if我有json的语法错误,是从内存中输入这个内容,最后,我会很好地让value字段与setOptions的文本字段相同。由于任何人谁可以帮我

回答

1

使用此:

{   id: 'theSelect', 
     name: 'vechicleSelect', 
     xtype: 'selectfield', 
     store: storeObejct, 
displayField: 'vehicle', 
    valueField: 'vehicle' 
} 

在此处读取整个API Sencha Touch selectfield

+0

嗨llya感谢您的答复。这有效,但我想用setOptions方法或类似的方法来实现 - 这是因为我在selectfield上有一个占位符,没有数值,然后我使用setOptions在上面更新字段。 (你实际上可能还记得你几天前曾帮助过我) –

+0

你是否需要使用商店?如果不是,你可以在'setOptions'方法中传递JSON字符串“{'vehicle':'mercedes'},{'vehicle''jaguar'}”。 – ilija139

+0

如果您必须使用商店,请将其设置为我的答案,然后使用此设置占位符文本: 'Ext.getCmp('theSelect')。el.dom.firstChild.firstChild.placeholder ='占位符值“;' – ilija139

1

您可以遍历存储并将数据推入数组,然后使用数组作为setOptions的参数。

1

为了增加warmachine的答案... 您认为:

   { 
        xtype: 'selectfield', 
        id: 'NameId', 
        label: 'Name', 
        labelWrap: true, 
        placeHolder: 'name' 
       }, 

控制器或在您的视图初始化函数:

initialize: function(){ 

    var me = this; 
    me.callParent(arguments); 

    var sto= Ext.getStore('Persons'); 
    sto.load(); 

    var options = []; 

    sto.each(function(record){ 
     options.push({ 
      value: record.get('displayname'), 
      text: record.get('displayname') 
     }); 
    }); 

    var box = Ext.ComponentQuery.query('#NameId')[0]; 

    box.setOptions(options); 
},