我的backbonejs应用程序有一个看起来像的模型:
var Store = Backbone.Model.extend({
urlRoot: "/stores/" + this.id
});
我有一个看起来像的路由器:
var StoreRouter = Backbone.Router.extend({
routes: {
'stores/edit/:id': 'edit'
},
edit: function(id){
var editStoresView = new EditStoresView({
el: ".wrapper",
model: new Store({ id: id })
});
}
});
var storeRouter = new StoreRouter();
Backbone.history.start({ pushState: true, hashChange: false });
但在我看来,我有:
var EditStoresView = Backbone.View.extend({
...
render: function() {
this.model.fetch();
this.$el.append ( JST['tmpl/' + "edit"]( this.model.toJSON() ) );
}
不幸的是,这会调用localhost / stores / undefined,但我不确定为什么?
答案 0 :(得分:2)
您收到“localhost / stores / undefined”电话的原因是因为您有以下代码。
urlRoot: "/stores/" + this.id
当你使用model.fetch()时,它使用urlRoot加上模型的ID来获取数据。换句话说,你应该只将urlRoot设置为“/ stores /”,不应该直接应用任何ID。
还有一件事,你应该在fetch()方法的“sucess”回调中编写下面的代码,因为一旦你调用fetch(),模型数据将不可用(因为它是对服务器的同步请求)
this.model.fetch();
this.$el.append ( JST['tmpl/' + "edit"]( this.model.toJSON() ) );
将其更改为
var el = this.$el;
this.model.fetch({ success : function(model, response, options) {
el.append ( JST['tmpl/' + "edit"]( model.toJSON() ) );
});
希望有所帮助!快乐的编码!