0

我有一个要在用户成功登录后加载的 UserStore。我不能让它工作,即找到一个模式来做到这一点。

我现在在 app.js 中有 UserStore,如下所示:

stores : ['UserStore']

店铺

Ext.define('MyApp.store.UserStore', {
extend : 'Ext.data.Store',
xtype : 'userstore',
config : {
    model : 'MyApp.model.User',
    autoLoad : true,
    proxy : {
        type : 'ajax',
        url : 'php/get_user.php',
        reader : {
            type : 'json',
            rootProperty : 'users'
        }
    },
    listeners : {
        beforeload : function() {
            console.log('Before load');
        },
        load : function(store) {
            console.log('load');
        }
    }
}
});

根据用户登录前未设置的 php $_SESSION['userid'] 检索用户。

启动应用程序时,商店已加载,但未找到任何数据。我需要回到开头再次登录,然后当然会话ID是在之前的登录中设置的。

我要完成的是延迟加载商店或仅在视图需要时自动加载。

我已经尝试过了,但我无法让它工作。

这就是我所做的:

选项1

我从 app.js 中删除了 UserStore 并向视图添加了一个 require 和 xtype 项目,但随后我得到 [WARN][Ext.dataview.DataView#applyStore] 找不到指定的商店

风景

Ext.define('MyApp.view.Profile', {
extend : 'Ext.Panel',
xtype : 'profileview',

requires : ['MyApp.store.UserStore', 'Ext.List', 'Ext.DataView', 'Ext.data.Store'],

config : {
    layout : 'fit',
    title : 'Profiel',
    iconCls : 'user3',
    cls : 'home',
    scrollable : true,
    styleHtmlContent : true,
    html : ['<h1>Mijn Profiel</h1>'].join(""),
    items : [Ext.create('Ext.DataView', {
        store : 'userstore',
        itemTpl : '<h2>{USERNAME}</h2><p>{EMAIL}</p>'
    })]
}
});

选项 2

尝试找出我是否可以将自动加载设置为 false 并通过某个侦听器按需加载。但我无法确切知道如何。

那么,如何实现这一点以及做到这一点的最佳模式是什么。

谢谢你的帮助!Ext.dataview.DataView#applyStore 找不到指定的Store

4

1 回答 1

3

我实际上从来没有这样分配商店:store : 'userstore'. 更好的方法是创建商店的一个实例并自己加载它,在我的商店上使用 autoLoad: false,我不喜欢它们在应用程序启动时加载。试试这个(我无法测试它,因为我通常不编写触摸应用程序)。

Ext.define('MyApp.view.Profile', {
    extend: 'Ext.Panel',
    xtype: 'profileview',

    requires: ['MyApp.store.UserStore', 'Ext.List', 'Ext.DataView', 'Ext.data.Store'],

    config: {
        layout: 'fit',
        title: 'Profiel',
        iconCls: 'user3',
        cls: 'home',
        scrollable: true,
        styleHtmlContent: true,
        html: ['<h1>Mijn Profiel</h1>'].join("")
    },

    initialize: function () {
        var me = this;

        //Create the instance of the store and load it
        var userStore = Ext.create('MyApp.store.UserStore');
        userStore.load();

        //Create the dataview
        var view = Ext.create('Ext.DataView', {
            store: userStore,
            itemTpl: '<h2>{USERNAME}</h2><p>{EMAIL}</p>'
        });
        //Add the dataview to the panel
        me.add(view);
    }
});

我更喜欢这种工作方式。

于 2013-02-27T09:39:36.173 回答