0

this.id 在 Blog.Collections.Posts 类中未定义。怎么了?

博客收藏

Blog.Collections.Posts = Backbone.Collection.extend({

  model: Blog.Models.Post,
  url: function() {
    console.log(this.id);
    if (this.id) {
      return '/api/posts/'+this.id
    }
    else{
      return '/api/posts'
    }
  }

});

我的路由器:

Blog.Routers.Posts = Backbone.Router.extend({

    routes: {
    ""                  :        "index",
    "entry/:id" :        "show"
  },

  show: function(id) {
    var collection = new Blog.Collections.Posts({id: id});
    collection.fetch({
      success: function() {
        var view = new Blog.Views.PostsIndex({ collection: collection });
        console.log(collection);
      }
    });
  }

});
4

2 回答 2

1

默认情况下,集合没有 id。除非您明确地为您的集合分配一个 id,否则将this.id变为未定义。ID 是模型的标准属性。你想做的很简单:

// Collection URL
url: function() {
    return '/api/posts'
}

骨干模型,如果它们是集合的一部分,则url在获取和保存时将使用该集合。因此,如果您执行以下操作:

// myModel is a part of the collection
myModel.save();

它会自动转到:

'/api/posts/:id'  // Assuming your model already has a model.id

希望这可以帮助。

于 2012-09-02T21:38:28.813 回答
0

IMO 您的代码设计错误。您可以从这里(转到blog/static/js/app.js)了解如何在主干上组织博客应用程序。

于 2012-09-02T20:29:44.410 回答