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 に答える