我开始使用parse.com开发一个Web应用程序,但我遇到了一个简单的问题。 我将模型(或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。
答案 0 :(得分:1)
Collection#fetch
行为已更改,默认情况下用于重置集合,但从1.0.0 it merges the new models开始使用set
:
当模型数据从服务器返回时,它使用 set 来(智能地)合并获取的模型,除非您通过
{reset: true}
,[...]
和set
不会触发"reset"
个事件,它会触发其他事件:
当发生这种情况时,会触发所有相应的
"add"
,"remove"
和"change"
事件。
如果您希望fetch
重置收藏品,则必须这样说:
books.fetch({ reset: true });