这是我的Backbone模型代码,我设置了默认值。
App.Models.Stock = Backbone.Model.extend({
defaults: {
name: '',
quantity: 0,
booked: 0,
minimum: 0,
active: 1
},
urlRoot: '/stock/'
});
这是我的Backbone视图代码,我在等待按钮点击。
templateItem: _.template($('#stockItem').html()),
events: {
'click #openStock': 'showStock'
},
showStock: function(e) {
var stock = new App.Models.Stock({
id: $(e.currentTarget).data('id')
});
stock.fetch();
$('#sidebar').empty().append(
this.templateItem(stock.toJSON())
);
}
问题在于,当我们获取模型时,服务器返回正确的结果,但是当我尝试将其转换为JSON时,Backbone为模型设置了默认值!为什么会这样?我的代码出了什么问题?
答案 0 :(得分:2)
您需要将stock.toJSON()
置于fetch
的回调中。 Fetch
是异步的,因此在您致电stock.toJSON()
之后才会加载服务器中的值。此时,默认值仍设置在stock
上,而不是从服务器加载的值。
...试
stock.fetch({
success: function() {
$('#sidebar').empty().append(
this.templateItem(stock.toJSON())
);
}
});