1

今日、backbone.js(0.9.2 => 0.9.9)とbackbone-relational(0.5.0 => 0.7.0)を更新しましたが、コードの一部が機能しなくなり、理由がわかりません。(私は段階的にアップグレードしようとしましたが(たとえば、バックボーンリレーショナル0.5.0 => 0.6.0)、それは役に立ちませんでした。)

私のモデル(いくつかの章を含む本):

window.Book = Backbone.RelationalModel.extend({
  relations:[{
    type: Backbone.HasMany,
    key:"chapters",
    relatedModel: "Chapter",
    collectionType:"ChaptersCollection",
    reverseRelation:{
      key:"book"
    }
  }]
});

window.BookCollection = Backbone.Collection.extend({
  model: Book,
  url: "/books"
});

window.Chapter = Backbone.RelationalModel.extend();
window.ChaptersCollection = Backbone.Collection.extend({
  model: Chapter,
  url: "/chapters"
});

次に、既存の本に章を追加し、「追加」イベント中に何かを実行したいと思います。問題はchapter.get("book")、本がコールバックundefinedで返されるにもかかわらず、ということです。successしかし、自分自身を見てください:

var book = ...;
book.get("chapters").on("add", function (chapter) {
  console.log("add");
  console.log(chapter.get("id"));
  console.log(chapter.get("book_id"));
  console.log(chapter.get("book"));
});

var chapter = book.get("chapters").create({title:"Foo"}, {
  wait: true,
  success:function () {
    console.log("success")
    console.log(chapter.get("id"));
    console.log(chapter.get("book_id"));
    console.log(chapter.get("book"));
  }
});    

コンソール出力:

> add
> 83
> 3
> null <<<<<<< Expecting a book object here, why null?
> success
> 83
> 3
> Book{...}

私が何を間違っているのか分かりますか?

4

1 に答える 1

1

問題はadd、子コレクションに対してイベントが発生したときに、逆の関係がまだ更新されていないことのようです。バックボーンまたはバックボーンのどのような変更があったのかわかりません。バージョン間の関係によってこの変更が発生しましたが、修正は簡単です。

addここで行うように、関連するコレクションのイベントを聞く代わりに、次のようにします。

book.get("chapters").on("add", function (chapter) {

バックボーンadd:<key>で説明されているように、モデル自体でイベントをリッスンする必要があります。関連ドキュメント:

book.on("add:chapters", function (chapter) {

実用的な例については、このフィドルをチェックしてください。

于 2013-01-12T22:13:16.897 に答える