Javascript 主干集合提取(添加:true)不会更新集合
集合未更新。此函数完成后,将触发事件,并在屏幕上绘制新项目。问题是集合没有添加新模型。主干网。集合。获取() 这里的内容是,传入函数被分配给Javascript 主干集合提取(添加:true)不会更新集合,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,集合未更新。此函数完成后,将触发事件,并在屏幕上绘制新项目。问题是集合没有添加新模型。主干网。集合。获取() 这里的内容是,传入函数被分配给var succees collection[方法](分别,选项),在您的情况下,方法是“重置” collection.reset必须完成并添加所有模型,同时触发所有事件。我不知道到底发生了什么,但它经历了收集、重置、收集、添加、模型、添加、等等……我没有完全理解 我不确定到底是什么问题,对此我很抱歉。我希望我至少能帮你尝试一些东西,这样也许我们能找到答案。
var succees
collection[方法](分别,选项)调用code>,在您的情况下,方法是“重置”
collection.reset
必须完成并添加所有模型,同时触发所有事件。我不知道到底发生了什么,但它经历了收集、重置、收集、添加、模型、添加、等等……我没有完全理解
我不确定到底是什么问题,对此我很抱歉。我希望我至少能帮你尝试一些东西,这样也许我们能找到答案。行if(success)success(收集、响应、选项)
是对succes函数的调用。您可以尝试让成功回调接受传递回的参数,并对这些参数进行一些安慰:
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);
},
另一件事是,我在源代码或文档中找不到collection.fetch使用add选项的任何地方。如果我错过了,请让我知道我想看一下
祝你好运,让我知道你发现了什么。也可能值得使用一个逐步调试程序进行跟踪
妈的,控制台经常向我展示最新版本的集合对象,而它本不应该这样做
试着安慰一下集合的长度,或者做些什么:
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.
});
}
主干网1.0删除了此功能,破坏了依赖于此的代码:
与之相比:
如果要将传入模型添加到当前集合中,而不是替换集合的内容,请将{add:true}作为获取选项传递
我建议恢复到旧版本的主干网,直到此问题得到解决。如前一个回答中所述,添加
选项在1.0.0中被删除。您可以通过传递remove:false
来完成相同的任务。从
通过使用可用的集合,可以自定义提取行为
选项。例如,要获取集合,请获取“添加”事件
对于每个新模型,以及对于每个已更改的现有模型的“更改”事件
模型,不删除任何内容:collection.fetch({remove:false})
在主干网1.0中,您必须手动触发重置:
var len = $this.Messages.length;
console.log(len);
//...
// or in the success callback
var len = collection.length;
console.log(len);
您是否验证了get调用中确实返回了数据?您是否只在$this.Messages
中查找成功
回调中新添加的模型?如果是这样,您确定在调用success
时,集合已经解析了响应并将其添加到集合中了吗?
var len = $this.Messages.length;
console.log(len);
//...
// or in the success callback
var len = collection.length;
console.log(len);
youColloection.fetch({reset: true});