Backbone.Collection.fetch():
fetch: function(options) {
options = options ? _.clone(options) : {};
if (options.parse === void 0) options.parse = true;
var success = options.success;
options.success = function(collection, resp, options) {
var method = options.update ? 'update' : 'reset';
collection[method](resp, options);
if (success) success(collection, resp, options);
};
return this.sync('read', this, options);
},
所以这里的情况是,您传入的函数被分配给var succees
.
collection[method](resp, options);
被调用,在你的情况下方法是'reset'
.
collection.reset
必须通过并添加所有模型,在途中触发所有事件。我不知道到底发生了什么,但它经历了collection.reset
, collection.add
, model.add
, 等等……我没有完全按照。
我不确定到底是什么问题,对此我很抱歉。我希望我至少可以帮助您尝试一些事情,这样也许我们可以弄清楚。该行if (success) success(collection, resp, options)
是对您的 succes 函数的调用。您可能会尝试做的是让您的成功回调接受传回的参数并对其进行一些安慰:
success: function(collection, resp, options) {
console.log(collection); // this might do the trick.
// if not, you could try the following
collection.on("reset", function(c, options) {
console.log(c); // see what that gives ya.
});
}
另一件事是,我在源代码或文档中找不到 collection.fetch 采用添加选项的任何地方。如果我错过了,请告诉我我想看一下。
祝你好运,让我知道你发现了什么。也可能值得通过调试器逐步完成。
妈的,我也很震惊,控制台经常向我展示不应该展示的最新版本的集合对象。
尝试安慰集合的长度,而不是什么:
var len = $this.Messages.length;
console.log(len);
//...
// or in the success callback
var len = collection.length;
console.log(len);