2

PHPでリクエストしたものをJSONに単純に返そうとしています。私の問題は、各ストックがまだ完成していないことです。確かに「render」ですが、「this.collection.models」はまだリクエストが終わっていないので完成していません。

この問題を修正するにはどうすればよいですか。ループが正しく行われるように、リクエストが終了するまで待ちます。

前もって感謝します

var Article = Backbone.Model.extend({});

var Articles = Backbone.Collection.extend({
    model:Article,
    url: function() {
        return _BASE_URL+'/sync/getLastArticles';
    },
    initialize:function () {
        this.fetch();
    }
});

var ArticlesView = Backbone.View.extend({
    template:$('#articles').html(),

    initialize:function () {
        this.collection = new Articles();
        this.render();
    },

    render:function () {
        console.log(this.collection);
        var that = this;
        _.each(this.collection.models, function (item) {
            console.log(item);
        }, this);
    },

    renderArticle:function () {
        ;
    }
});
4

1 に答える 1

7

あなたが行わrenderれる前にfetch。あなたがしたいことは、 がfetch完了するのを待ってからrender. 完了したときに通知を受け取るにはどうすればよいでしょうfetchか。次の 2 つのオプションがあります。

成功関数(私はお勧めしません)

// ArticlesView
initialize: function() {
  _.bindAll(this); // Don't forget to BIND
  this.collection = new Articles();
  this.collection.fetch({
    success: this.render
  });
}

フェッチが成功すると、renderが呼び出されます。ただし、これはスコーピングの問題を引き起こす可能性があり、Backbone.js はコールバック関数のはるかに優れた代替手段であるeventsを提供します。

イベント コールバック(これを優先)

// ArticlesView
initialize: function() {
  _.bindAll(this);
  this.collection = new Articles();
  this.collection.on('reset', this.render); // bind the reset event to render
  this.collection.fetch();
}
于 2012-09-06T09:49:48.827 に答える