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指定されたストアが見つかりません

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 に答える