多个商店加载问题Sencha Touch

时间:2014-01-29 13:47:59

标签: extjs model-view-controller sencha-touch sencha-touch-2 store

我有两个商店的“民意调查”和“选择”,各自的模型为“民意调查”和“选择”

模型

轮询

Ext.define('PollsTest.model.Poll', {
extend: 'Ext.data.Model',
xtype : 'poll', 

config: {
    fields: [
        { name: 'title'},
        { name: 'uri' },


    ],

    hasMany :
            [
                {
                    model : 'PollsTest.model.Choices',
                    name : 'Choices',
                    primaryKey : 'title',
                    foreignKey : 'title',
                    foreignStore : 'Choices'
                }
            ]

}


});

选择

Ext.define('PollsTest.model.Choice', {
extend: 'Ext.data.Model',




config: {
    fields: [
        { name: 'choice', type: 'auto' },
        { name: 'votes', type: 'auto' },
        {name : 'title', type: 'auto'},
        {name : 'uri', type : 'auto'}

    ],


belongsTo : {
                model : 'PollsTest.model.Choices',
                    name : 'Choices',
                    primaryKey : 'title',
                    foreignKey : 'title',
                    foreignStore : 'Choices',
                    getterName: 'getChoices',
                    setterName: 'setChoices'

            }        
}



});

店铺

投票

Ext.define('PollsTest.store.Polls',{

extend : 'Ext.data.Store',
alias : 'store.pollStore',
//xtype:'pollStore',        

requires : 
            [
                'PollsTest.model.Poll',
                'Ext.data.proxy.JsonP',
                'Ext.data.reader.Json'

            ],


config :
        {   
            autoLoad : true,
            model : 'PollsTest.model.Poll',
            storeId :'pollStore',




            listeners : 
                    {
                        load : function(store, records)
                            {
                                console.log('store loaded',records);
                            }
                    },


            //storeId : 'pollstore',
            proxy : 
                {
                    type : 'jsonp',
                    url : 'http://localhost/polls',
                    reader : 
                        {
                            type : 'json',
                            rootProperty : 'polls'
                        }
                }
        },



});

选择

Ext.define('PollsTest.store.Choices',{

extend : 'Ext.data.Store',
alias : 'store.choiceStore',        

requires : 
            [
                'PollsTest.model.Choice'
            ],


config :
        {   
            autoLoad : false,
            model : 'PollsTest.model.Choice',
            storeId :'choiceStore',

            listeners : 
                {
                    load : function(store, records)
                            {
                                console.log('choice store loaded',records);
                            }

                },


            proxy :
                {
                    type : 'jsonp',
                    url : '',

                    reader : 
                        {
                            type: 'json',
                            rootProperty : 'choices'
                        }

                }


        },




});

所以从民意调查商店我可以填充我的列表,点击列表项后,控制器会将详细信息面板推送到视图。 选择商店将根据列表中发生的点击事件进行填充。所以问题是我必须在加载Choices商店之后将细节面板推送到视图

我该怎么做?建议表示赞赏。

和我的控制器看起来像这样

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


requires : ['PollsTest.controller.ChoiceController'],

config: {





    refs: {
        mainController : 'mainpanel',
        controller_list : 'pollslist',
        details_controller : 'pollsdetails'
    },
    control: {

        controller_list : 
                    {
                        itemtap : 'ShowPoll'
                    },



            }

            },

ShowPoll : function (list, index, target, record, e, eOpts)
                {   
                   var tochoice = record.data.uri;

                   var main_path = 'http://localhost';
                   var choices_url = main_path+tochoice;

                   var choice_store_object = Ext.getStore('choiceStore');
                   choice_store_object.getProxy().setUrl(choices_url);
                   choice_store_object.load();

                   console.log(choice_store_object.getCount());

                /*   var choices_store_object = Ext.create('PollsTest.store.Choices');

                   var checking = choices_store_object.on('load',function(){return true;});

                   if(checking==true) --> didn't work no detail panel pushing is happening but the order of loading the stores works fine here. 
                        {
                 */     console.log('before pushing');
                        this.getMainController().push({xtype : 'pollsdetails',data : record.data });
                        console.log('after Pushing');

                 //       }












                //this.getApplication().getController('ChoiceController').onDetailsShow(this,record,tochoice);   






                }








 });

2 个答案:

答案 0 :(得分:0)

您可以在选择商店加载功能中传递回调函数。商店加载后将执行回调函数。

choice_store_object.load(function(records, operation, success) {
    // push the pollsdetails view here
}, this);     

答案 1 :(得分:0)

这就是我实施的方式

var choices_store_object = Ext.create('PollsTest.store.Choices');

                   var checking =choice_store_object.load(function(records, operation, success)

                    {


                                    console.log('before pushing');
                                    this.getMainController().push({xtype : 'pollsdetails',data : record.data });
                                    console.log('after Pushing');            






                   }, this);

`