0

ビューを管理するためにバックボーン LayoutManager を使用しています。

render が呼び出される前にモデル データをフェッチする際に問題が発生しています。Ajax 成功のコールバックがまだ行われていないため、明らかにエラーがスローされます。

これを修正する 1 つの方法は、ルーター内でモデルをフェッチapp.useLayout("main").render();し、success メソッドに入れることです。それは正しい方法ですか、それともより良い解決策はありますか?

ルーターコード:

app.useLayout("main").setViews({
    ".place-detail": new Place.Views.Show({
      model: new Place.Model({ place_id: place_id })
    })
}); 

app.useLayout("main").render();

コードを表示:

Views.Show = Backbone.View.extend({
    initialize: function(options) {
        _.bindAll(this,"render");
        this.model.on("change", this.render, this);
        this.model.fetch();
    });
});
4

1 に答える 1

2

Backbone のフェッチは成功とエラーのコールバックを受け入れるので、フェッチが完了するのを待ってからコードを実行する場合は、それを成功のコールバックに入れます。

Views.Show = Backbone.View.extend({
    initialize: function(options) {
        var _this = this;
        _.bindAll(this,"render");
        this.model.fetch({
          success: function(model, response) {
              _this.render();
              _this.model.on("change", _this.render, _this);
              _this.someOutsideFunctionCall();
          },
          error: function(model, response) {
              console.log("Error Fetching.");
          }
        });
    };
});

私は CoffeeScript で多くのコーディングを行ってきたので、すべての ({}); が正しいかどうかはわかりませんが、それが基本的な要点です。_this = this の宣言に注意してください。これは、コールバック関数内で this を参照しようとすると、何について話しているのかわからなくなるためです。

于 2012-09-28T14:25:24.230 に答える