骨干关系:与没有关系的独立模型一起使用

时间:2013-07-22 06:43:44

标签: backbone.js backbone-views backbone-relational

我正在使用骨干关系。 onetomany模型的用法很好。

但我在使用单一/独立模型的骨干关系方面遇到了麻烦:

window.BeerOnlineShopPosition = Backbone.RelationalModel.extend({
urlRoot:"../api/beeronlineshoppositions",
idAttribute: 'id',
relations: [                
],
defaults:{
    "id":null,
    "position_amount":""
}
});

window.BeerOnlineShopPositionCollection = Backbone.Collection.extend({
model:BeerOnlineShopPosition,
url:"../api/beeronlineshoppositions"
});

主要中我有:

    beeronlineshopproductDetails:function (id) {
    var beeronlineshopproduct = BeerOnlineShopProduct.findOrCreate(id);
    beeronlineshopproduct.fetch();

   var beeronlineshopproduct_view = new BeerOnlineShopProductView({el: $('#content'), model: beeronlineshopproduct});

},

因此,当跳转到现有记录(... beeronlineshop / beeronlineshopproducts /#4)时,没有任何反应。但调试显示,执行了提取并且视图已加载。但视图不会以某种方式呈现。

刷新(f5)时,视图会正确呈现。

如上所述,整个事情适用于一对多模型,所以我的问题是:

我在模型部分做了一些微不足道的语法错误吗?......还是有其他明显的原因导致我遇到麻烦?

1 个答案:

答案 0 :(得分:0)

可能是因为findOrCreate创建的异步请求。 beeronlineshopproduct.fetch()正在向服务器发出请求,但在服务器返回响应之前正在呈现视图。

您有两种选择。您可以在fetch成功时将视图呈现作为回调传递:

beeronlineshop.fetch({
  success: function() {
    var beeronlineshopproduct_view = new BeerOnlineShopProductView({el: $('#content'), model: beeronlineshopproduct})
  });

或者您可以在BeerOnlineShopProductView中传递一个初始化程序,该程序会监听其与服务器同步的模型,并调用视图重新呈现自身,如下所示:

window.BeerOnlineShopProductView = Backbone.View.extend({
  initialize: function() {
    this.listenTo (this.model, "sync", this.render)
  },
})