8

Marionette を 1 週間使用していますが、生活が本当に楽になりました。

一部のビューはレンダリング/フェッチにかなりの時間がかかるため、コレクションまたはモデルがフェッチされているときにユーザーに通知できるようにする必要があります。例を挙げると、私は小さなモックアップを作りました:

http://i.stack.imgur.com/IU3BP.png

ユーザーがカテゴリをクリックすると、そのカテゴリ内のすべてのアイテムのコレクションが読み込まれる必要があります。コレクションが取得される前に、画像 (ビュー 1) に見られるように、読み込み中のビューを表示したいと考えています。これを実装するためのエレガントなソリューションは何でしょうか。ユーザーがフェッチ トリガーを有効にしている次の投稿を見つけました: http://tbranyen.com/post/how-to-indicate-backbone-fetch-progress。これは機能しているように見えますが、私が望んでいたようではありません。これは私が思いついたものです:

    var ItemThumbCollectionView = Backbone.Marionette.CollectionView.extend({
        collection: new ItemsCollection(userId),
        itemView: ItemThumbView,
        initialize: function(){
            this.collection.on("fetch", function() {
                //show loading view
            }, this);
            this.collection.on("reset", function() {
                //show final view
            }, this);
            this.collection.fetch();

            Backbone.history.navigate('user/'+identifier);
            this.bindTo(this.collection, "reset", this.render, this)
        }
    });

たとえば、「LoadItemView」というオプションの属性があればいいのですが。これは、フェッチ中に itemView をオーバーライドします。あなたの意見では、これは良い習慣でしょうか?

4

4 に答える 4

1

数日前、Derick Bailey が可能な解決策を Marionette Wiki に投稿しました: https://github.com/marionettejs/backbone.marionette/wiki/Displaying-A-%22loading-...%22-Message-For-A -コレクションまたは複合ビュー

于 2012-08-10T20:35:21.483 に答える
0

一般に、データをフェッチしているときにプリローダーをロードしてから、コレクションを表示することをお勧めします。何かのようなもの:

region.show(myPreloader);
collection.fetch().done(function() {
    region.show(new MyCollectionView({ collection: collection });
});
于 2017-03-06T12:28:19.137 に答える
0
var myCollection = Backbone.Marionette.CollectionView.extend({
    initialize: function(){
        this.collection.on('request', function() {
            //show loading here
        })
        this.collection.on('reset', function() {
            //hide loading here
        })
        this.collection.fetch({reset: true})
    }
})

今は良くなっていると思います。

于 2013-12-05T09:09:03.887 に答える