2

サーバーからのJsonの応答に応じてビューを動的にロードするSenchaTouch2を使用してモバイルアプリケーションを作成しています。

これは、ビューをロードする前に、いくつかの一般的な要素を使用してビューを構成する必要があることを意味します。たとえば、リストビューに対応するサーバーからJson文字列を受け取った場合、リストアイテム(名前URL、説明)にストアプロキシを動的に入力する必要があります。

これは機能しますが、そのリストからいくつかの項目を選択して別のリストをロードしたいのですが、今回はプロキシを変更したいと思います。私の新しいプロキシは、選択したアイテムのurlフィールドです。選択したアイテムからURLフィールドを取得してプロキシを変更しましたが、これにより問題が発生します。

Ext.navigation.Viewを使用していますが、ナビゲーション履歴を保持したいと思います。上記の場合、ナビゲーション履歴に戻ると、最初のリストの項目が最後のリストの項目に変わります。

それぞれの独立したデータに応じてビューの動的なロードを実現し、MVC-Storeパターンとナビゲーション履歴を常に維持するためのワークフローを探しています。

これはリストアイテムの私のモデルです:

Ext.define('ExampleApp.model.ListItem', {
    extend: 'Ext.data.Model',
    config: {
        fields: ['name', 'url', 'descriprion']
    }
}

これはリストのストアです:

Ext.define('ExampleApp.store.ListItems', {
    extend: 'Ext.data.Store',
    config: {
        autoLoad: false,
        model: 'ExampleApp.model.ListItem',
        proxy: {
            type: 'jsonp'
            url: 'http://mydomain.com/myjsonresponse',
            reader: {
                type: 'json',
                useSimpleAccessors: true
            }
        }
    }
})

これは私の見解です:

Ext.define('ExampleApp.view.MyList', {
    extend: 'Ext.List',
    xtype: 'mylist',
    requires: ['ExampleApp.store.ListItems'],

    config: {
        title: 'My List',        
        itemTpl: '{name} - {description}',
        store: 'ListItems'
    }
})

これは私のリストのitemtapイベントで呼び出される関数です:

listItemTapped: function (view, index, target, record, event) {
    var listItems = Ext.getStore('ListItems');

    listItems.getProxy().setUrl(record.get('url'));
    listItems.load();

    this.getMain().push({
        xtype: mylist
    });
}
4

2 に答える 2

3

試すことができるのは、既存のストアを再利用するのではなく、リストごとに個別のストアを作成することです。

listItemTapped: function (view, index, target, record, event) {
    var listItems = Ext.create('ExampleApp.store.ListItems', {newUrl : record.get('url')});
    listItems.load();

    this.getMain().push({
        xtype: mylist,
        store: listItems
    });
}

newUrlを使用するための初期化関数を追加します。

Ext.define('ExampleApp.store.ListItems', {
    extend: 'Ext.data.Store',
    config: {
        autoLoad: false,
        newUrl : null,
        model: 'ExampleApp.model.ListItem'
    },
    initialize : function() {
        this.setProxy({
            type: 'jsonp'
            url: this.config.newUrl,
            reader: {
                type: 'json',
                useSimpleAccessors: true
            }
        });
    }
})

ビューが表示されたら、これらのストアを破棄することをお勧めします。

于 2013-03-27T03:44:34.963 に答える
0

@ThinkFloyd、ビューを離れるときにストアを破棄する必要があることに同意します。これは、後でアプリケーションに多くのビューがあり、大量のデータを含む大きなストアがある場合に問題が発生するためです。私は最近同じ問題に直面しています、そしてこれは私を大いに助けます...ありがとう

于 2015-03-19T10:19:19.143 に答える