未定义的id获取

时间:2014-07-09 18:00:56

标签: javascript jquery backbone.js underscore.js

我的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,但我不确定为什么?

1 个答案:

答案 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() ) );
   });

希望有所帮助!快乐的编码!