Sencha Touch选择字段加载问题

时间:2014-09-24 11:47:51

标签: javascript extjs sencha-touch sencha-touch-2 sencha-touch-2.1

我正在使用select fiield在我的项目中加载国家/地区。我从数据库加载数据。当我使用自动加载时它非常有效:在我的商店中是真的。 但是,当我使用自动加载时它没有加载:false并手动加载它。

附加了示例caode,

提前致谢。

存储

Ext.define("MyProject.store.CountryStore", {    extend: 'Ext.data.Store',
    storeId: "countryStore",
    config: {
        model: "MyProject.model.CountryModel",
        autoLoad: false, //this is the issue
        header: {
            "Content-Type": "application/json"
        },
        proxy: {
            type: 'ajax',
            url: MyProject.Config.config.webService + 'GetCountries',
            //extraParams: {
            //    sessionId: sessionId
            //},
            reader: {
                type: 'json',
                rootProperty: 'd.countries'
            },
            actionMethods: {
                create: 'POST',
                read: 'POST',
                update: 'POST',
                destroy: 'POST'
            },
            writer: {
                encodeRequest: true,
                type: 'json'
            }
        }
    }
});

控制器

var CountryStore = Ext.create('MyProject.store.CountryStore', {                            });


            CountryStore.getProxy().setExtraParams({
                sessionId: sessionId
            });
            CountryStore.load({
            });

查看

{                xtype: 'selectfield',
                name: 'country',
                label: 'Country',
                store: 'CountryStore',
                valueField: 'code',
                displayField: 'name',
                placeHolder: 'Select your country'
}

模型

Ext.define("MyProject.model.CountryModel", {
    extend: 'Ext.data.Model',
    config: {
        idProperty: 'Id',
        fields     : [
             { name: 'code'},
             { name: 'name'}
        ]
    }
});

2 个答案:

答案 0 :(得分:0)

在将商店设置为名称时,您使用控制器的商店,它是控制器的所有视图的全局商店。如果要使用用户定义存储,则需要将其传递给视图。

Ext.define('YourProject.controller.YourController', {     
    ...

    sessionId: 'someId',

    init: function () {
        var me = this;

        me.control({
            scope: me,

            'yourviewname': {
                afterrender: me.onViewAfterRender
            }
        });

        me.callParent(arguments);
    },

    onViewAfterRender: function(view) {
        var store = view.getStore();

        if (store) {
            store.getProxy().setExtraParams({
                sessionId: sessionId
            });

            store.load();
        }
    }

    ...
});

Ext.define('YourProject.view.YourView', {
    ...
    alias: 'widget.yourviewname',
    requires: ['YourProject.store.CountryStore'],

    initComponent: function() {
        var me = this,
            countryStore = Ext.create('YourProject.store.CountryStore', {});

        Ext.applyIf(me, {
            ...

            items: [
                {
                    xtype: 'selectfield',
                    name: 'country',
                    label: 'Country',
                    store: countryStore,
                    valueField: 'code',
                    displayField: 'name',
                    placeHolder: 'Select your country'
                }
            ]
        });
    }
});

答案 1 :(得分:0)

我最终解决了它:)

当我从控制器设置存储时,它可以工作:)

myView.items.items[9].setStore(CountryStore);