0

我开始使用 parse.com 开发网络应用程序,但我遇到了一个简单的问题。我将模型(或 Parse SDK 中的对象)定义为:

Book.Model = Parse.Object.extend("book", {
    // Default attributes for the book.
    defaults: {
      title: "placeholder...",
    },

    // Ensure that each book created has `title`.
    initialize: function() {
      if (!this.get("title")) {
        this.set({"title": this.defaults.title});
      }
    },

  });

和一个集合:

Book.List = Parse.Collection.extend({

    // Reference to this collection's model.
    model: Book.Model,

    initialize: function() {
    },

  });

然后,如果我尝试类似

   var books = new Book.List();
   books.fetch({
        success: function(collection) {
            console.warn(collection);
        },
        error: function(collection, error) {
           // The collection could not be retrieved.
        }
    });

一切顺利。日志:

child {length: 5, models: Array[5], _byId: Object, _byCid: Object, model: function…}
_byCid: Object
_byId: Object
length: 5
models: Array[5]
__proto__: EmptyConstructor

但是如果我尝试使用事件回调而不是成功方法,我会得到一个空数组。代码:

books.on('reset', this.log());
books.fetch();

    log: function() {
      console.log(books);
    }

并记录:

child {length: 0, models: Array[0], _byId: Object, _byCid: Object, model: function…}
_byCid: Object
_byId: Object
length: 5
models: Array[5]
__proto__: EmptyConstructor

这很奇怪(因为我认为每个解决方案都等待从服务器填充集合)。有谁知道为什么会这样?

我实际上正在使用 Backbone Boilerplate 和 Parse.com js SDK。

4

1 回答 1

1

Collection#fetch行为发生了变化,默认情况下它用于重置集合,但从1.0.0 开始,它使用以下方式合并新模型set

当模型数据从服务器返回时,它使用set来(智能)合并获取的模型,除非你通过{reset: true}, [...]

并且set不会触发"reset"事件,它会触发其他事件:

发生这种情况时会触发所有适当"add""remove"、 和"change"事件。

如果您想fetch重置收藏,那么您必须这样说:

books.fetch({ reset: true });
于 2013-04-26T21:50:03.670 回答