1

Collection-backed Meteor プロトタイプ内でアイテムの遅延読み込み配列をシミュレートしようとしていますが、反応性があります。

たとえば、プロトタイプ付きの本のコレクションがあるとします。

Book = function(document) {
  this._title = document.title;
  this._author = document.author;
  // ...
};
Books.prototype = {
  get id() {
    // Read-only
    return this._id;
  },
  get title() {
    return this._title;
  },
  set title(value) {
    this._title = value;
  },
  // ...
};
Books = new Meteor.Collections('books', {
  transform: function(doc) {
    return new Book(doc);
  }
});

そして今、Shelf の Shelf コレクションが必要ですが、Books を遅延ロードしたいと考えています。

Shelf = function(document) {
  this._location = document.location;
  this._floor = document.floor;
  // ...
  this._book_ids = document.book_ids;
};
Shelf.prototype = {
  get id() {
    // Read-only
    return this._id;
  },
  get location() {
    return this._location;
  },
  set location(value) {
    this._location = location;
  },
  // ...
  get book_ids() {
    // This returns an array of just the book's _ids
    return this._book_ids;
  },
  set book_ids(values) {
    this._book_ids = values;
    // Set _books to "undefined" so the next call gets lazy-loaded
    this._books = undefined;
  },
  get books() {
    if(!this._books) {
      // This is what "lazy-loads" the books
      this._books = Books.find({_id: {$in: this._book_ids}}).fetch();
    }
    return this._books;
  }
};
Shelves = new Meteor.Collections('shelves', {
  transform: function(doc) {
    return new Shelf(doc);
  }
});

これで、呼び出しShelf.booksてすべての を取得できる Self ができましBooksたが、呼び出すまでロードされません。さらに、 set を呼び出すとbook_idsデータが無効になるため、次に を呼び出すと、それに関連付けられbooksた の新しいセットが生成されます。BooksShelf

では、これをリアクティブにするにはどうすればよいのbook_idsでしょうか? または、さらに良いことに、 aが更新された場合、それに関連するすべて(およびそれを呼び出した人) も反応的に更新されますか?BooksShelf.booksBookBookShelf.books

4

0 に答える 0