0

我正在使用主干 LayoutManager 来管理我的视图。

我在调用渲染之前获取模型数据时遇到问题,这显然会引发错误,因为 Ajax 成功回调尚未完成。

解决此问题的一种方法是在路由器中获取模型并将其app.useLayout("main").render();放入成功方法中。这是正确的方法还是有更好的解决方案?

路由器代码:

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 的 fetch 接受成功和错误回调,所以如果你想在执行更多代码之前等待 fetch 完成,把它放在成功回调中:

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 回答