0

我正在使用骨干关系。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) 时,视图会正确呈现。

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

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

4

1 回答 1

0

可能是因为创建了异步请求findOrCreatebeeronlineshopproduct.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)
  },
})    
于 2013-07-31T16:21:04.743 回答