Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 要从存储中的对象列表中拾取的表单字段_Forms_Extjs_Sencha Touch 2_Store_Picker - Fatal编程技术网

Forms 要从存储中的对象列表中拾取的表单字段

Forms 要从存储中的对象列表中拾取的表单字段,forms,extjs,sencha-touch-2,store,picker,Forms,Extjs,Sencha Touch 2,Store,Picker,我是Sencha的新手,尝试实现一个Sencha formpanel,其中有一个字段可以从存储中的对象列表中选择。这似乎是一个足够基本的模式,必须有一个简单的解决方案。我有一个模型,它定义了一个ajax端点,返回一个json数组,其中包含名称/id对: Ext.define('MyApp.model.Place', { extend: 'Ext.data.Model', config: { fields: [ {name: 'name',

我是Sencha的新手,尝试实现一个Sencha formpanel,其中有一个字段可以从存储中的对象列表中选择。这似乎是一个足够基本的模式,必须有一个简单的解决方案。我有一个模型,它定义了一个ajax端点,返回一个json数组,其中包含名称/id对:

Ext.define('MyApp.model.Place', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'name', type: 'string'},
            {name: 'id', type: 'int'},
        ],
        proxy: {
            type: 'ajax',
            url: '/m/places/',
            reader: {
                type: 'json',
                rootProperty: 'places',
            },
        },
    },
});
和一家商店:

Ext.define('MyApp.store.Place', {
    extend: 'Ext.data.Store',
    requires: ['MyApp.model.Place'],
    config: {
        model: 'MyApp.model.Place',
        autoLoad: true,
        sorters: [
            {
                property : 'name',
                direction: 'ASC',
            },
        ],
    },
});
我想要一个只读文本字段作为地名,一个隐藏字段用于提交地名id:

{
    xtype: 'textfield',
    name: 'place_name',
    label: 'Place',
    readOnly: true,
    listeners: {
        focus: function () {
            var place_picker = Ext.create('Ext.Picker', {
                slots: [
                    {
                        name: 'place_name',
                        title: 'Choose a Place',
                        store: Ext.create('MyApp.store.Place'),
                        itemTpl: '{name}',
                        listeners: {
                            itemtap: function (obj, index, target, record, e, eOpts) {
                                var form = Ext.getCmp('entityform');
                                form.setValues({
                                    place_name: record.get('name'),
                                    place_id: record.get('id'),
                                });
                                // how to dismiss the picker?
                                obj.parent.hide();
                            },
                        },
                    },
                ]
            });
            Ext.Viewport.add(place_picker);
            place_picker.show();
        },
    },
},
{
    xtype: 'hiddenfield',
    name: 'place_id',
},
此时,点击该字段会导致选择器从底部向上滑动并显示加载动画,但它没有被地名列表填充,尽管我可以看到ajax请求已经发出,并且返回了预期的json文档

我会在这里停下来,问我是否在正确的轨道上,或者是否有更好的方法

为什么没有用ajax请求的结果填充选择器?我对itemTpl的使用是否不正确

我是否以适当的方式设置表单字段


我应该如何在itemtap上解雇选取者?不知何故,我怀疑使用hide是否正确。

选择器插槽有一个数据配置,它是一个对象数组。它应该具有带有文本和值的特定格式

slots :[
    data : [{
text : someValue,
value : someValue1,}] ]
您需要向插槽添加包含文本和值字段的对象