gpt4 book ai didi

javascript - Backbone : collection adds random model to itself

转载 作者:行者123 更新时间:2023-11-28 00:40:17 25 4
gpt4 key购买 nike

我一直在 StackOverflow 中搜索问题的答案,但尚未找到有用的信息。

有关如何设置集合对象的一些背景知识。在获取时,我向集合传递一个哈希值,并将 url 设置为 http://localhost/index.php?a=hash。服务器应返回该特定哈希的 12 个名称。

由于某种原因,集合的第一个模型始终是一个属性设置为字符串的模型,用于获取集合数据,之后的每个模型都很好。

fetch : function(o) {
var that = this,
successCallback = o.success,
errorCallback = o.error;
$.ajax({
type : 'GET',
url : this.url + o.hash,
dataType : 'json',
success : function(data) {
_.each(data, function(name) {
console.log(name);
that.add(new Model({
_id : name
}));
});
successCallback();
},
error : errorCallback
});
}

记录的名称列表是我期望从服务器获得的 12 个名称 [aaa,bbb,ccc,ddd...]。当我使用集合渲染 View 时,这就是我所拥有的:

Object { cid="c1", attributes={...}, collection={...}, more...
Object { cid="c2", attributes={...}, _changing=false, more...}
Object { cid="c3", attributes={...}, _changing=false, more...}
Object { cid="c4", attributes={...}, _changing=false, more...}
Object { cid="c5", attributes={...}, _changing=false, more...}
Object { cid="c6", attributes={...}, _changing=false, more...}
Object { cid="c7", attributes={...}, _changing=false, more...}
Object { cid="c8", attributes={...}, _changing=false, more...}
Object { cid="c9", attributes={...}, _changing=false, more...}
Object { cid="c10", attributes={...}, _changing=false, more...}
Object { cid="c11", attributes={...}, _changing=false, more...}
Object { cid="c12", attributes={...}, _changing=false, more...}
Object { cid="c13", attributes={...}, _changing=false, more...}

正确的模型看起来像这样:/image/2Fprv.png

该系列的第一个型号是:/image/5eGdB.png

看起来我收藏的第一个模型有一个 attributes 属性,其中包含用于获取实际数据的初始哈希值。我不知道它是如何设置的,或者在哪里设置的。以下是我引用该系列模型的方式:

render : function() {
_.each(this.collection.models, function(model) {
console.log(model);
var ele = this._build(model.id),
a = ele.find('a');

this.$el.append(ele);
a.click(App.pageController.trigger('showSetData', model.id));
}.bind(this));
}

我可以进去并删除该集合的第一个模型,但我想知道为什么会发生这种情况,以及是否有比黑客更好的方法来解决这个问题。如果您需要任何其他信息,请告诉我!谢谢。

集合代码

初始化

var col = new ClientSetList(hash);

ClientSetList Backbone.Collection 代码

var ClientSetList = Backbone.Collection.extend({
initialize : function(hash) {
this.url = App.config.host +
App.config.base +
App.config.HASH + hash;
},

fetch : function(o) {
var that = this,
successCallback = o.success,
errorCallback = o.error;
$.ajax({
type : 'GET',
url : this.url,
dataType : 'json',
success : function(data) {
_.each(data, function(setName) {
console.log(setName);
that.add(new Model({
set_name : setName
}));
});
successCallback();
},
error : errorCallback
});
}
});

最佳答案

初始化集合时的第一个参数是模型列表,第二个参数是选项哈希,这与使用第一个参数作为选项的 View 和模型不同。您所描述的内容与初始化集合时省略空数组时发生的情况一致。

您可以在初始化集合的位置发布代码吗?

我认为你有:

var opt = {
//... options
}
var c = new Backbone.Collection(opt);

你应该拥有什么:

var opt = {
//... options
}
var c = new Backbone.Collection([], opt);

关于javascript - Backbone : collection adds random model to itself,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28030317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com