我正在使用骨干关系。 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)时,视图会正确呈现。
如上所述,整个事情适用于一对多模型,所以我的问题是:
我在模型部分做了一些微不足道的语法错误吗?......还是有其他明显的原因导致我遇到麻烦?
答案 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)
},
})