Ext JS:为商店中的数据分配变量

时间:2013-11-28 15:28:32

标签: javascript extjs extjs4 extjs-mvc

我想根据用户的网址更改我的项目视图中的值。 目前,我有一个商店类,使用loadStore方法动态加载url。

Ext.define('store.app.appStore', {
extend : 'store.Store'
, model : 'model.app.appModel'  
, alias : 'widget.app-appstore'
, proxy : {
            type : 'rest'
            , url : ''
            , reader : {
                type : 'json'
            }
        }
, loadStore : function(id) {
            this.getProxy().url = app.getApplication().getAppUrl();
            console.log(this.getProxy().url);
            this.load({});
        }
});

一个控制器根据id加载url,然后在启动时用数据更新我的表单。

Ext.define('controller.app.appController', {
extend : 'Ext.app.Controller',

refs :  
        {ref : 'appView', selector : 'app-appview'}
        ],

        stores : ['app.appStore'],     

        init : function() {
            this.control({
                'app-appview' : {
                    selectionchange : this.onStartUp
                }
            });
        },

        onStartUp : function() {
                this.getStore('app.appStore').loadStore();

                this.getAppView().updateForm({PARAMETER});
            }

但是,我在解决如何为我正在加载的数据分配变量时遇到问题,因此在我的updateForm()方法中,我会用数据替换{(PARAMETER)}。

该模型如下所示:

Ext.define('model.app.Summary', {
extend : 'Ext.data.Model',

fields : [
   'id', 'name', 'address', 'phone', 'optionOne', 'optionTwo'
],

getId : function() {
    return this.get('id');
},

getName : function() {
return this.get('name');
},

getAddress : function() {
return this.get('address');
},

getPhone : function() {
return this.get('phone');
},

getOptionOne : function() {
return this.get('optionOne');
},

getOptionTwo : function() {
return this.get('optionTwo');
},

});

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您需要在store load事件中完成updateForm。例如,在controller's init

中的load事件中添加一个监听器
init: function () {
        Ext.getStore('app.appStore').on('load', this.LoadFormData);
},

然后在LoadFormData方法中,您可以访问商店中加载的数据

LoadFormData: function (s) {
        var value = s.data.items[0].get('myFieldFromStore');
        //insert value where required here
}

答案 1 :(得分:0)

是的,你的代码必须有这样的地方:

var myObject = Ext.create('Ext.data.ArrayStore', {
    model: 'model.app.Summary',
    data: [['someid','somename', 'someaddress', 'somephone', 'someoptionOne', 'someoptionTwo']]
});

从您要存储的数据创建对象的位置。

在这个例子中,

myObject是ArrayStore,这意味着您可以在对象中存储多个项目,所有项目都包含已定义的字段。

假设您想获得name

第一个项的myObject属性
myObject.data.items[0].data.name

我不确定模型中的getWhatever()方法。