Backbone: collection 给自己添加随机模型
Backbone: collection adds random model to itself
我一直在 Whosebug 上搜索我的问题的答案,但还没有找到有用的东西。
关于我如何设置 collection object 的一些背景知识。在获取时,我将 collection 传递给一个散列,并将 url 设置为 http://localhost/index.php?a=hash
。服务器应该 return 该特定哈希的 12 个名称。
出于某种原因,collection 的第一个模型始终是属性设置为用于获取 collection 数据的字符串的模型,之后的每个模型都非常好.
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...]。当我使用 collection 渲染视图时,这就是我所拥有的:
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...}
正确的模型如下所示:http://i.stack.imgur.com/2Fprv.png
collection的第一个模型是:http://i.stack.imgur.com/5eGdB.png
看起来我的 collection 的第一个模型有一个 attributes
属性 和用于获取实际数据的初始散列。我不知道它是如何设置的,或者在哪里设置。以下是我如何引用 collection:
的模型
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));
}
我可以直接删除 collection 的第一个模型,但我想知道为什么会这样,以及是否有比 hack 更好的解决方法。让我知道您是否需要任何其他信息!谢谢。
Collection代码
初始化
var col = new ClientSetList(hash);
ClientSetListBackbone.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
});
}
});
初始化时的第一个参数 Collection 是模型列表,第二个是选项散列,这与使用第一个参数作为选项的视图和模型不同。您所描述的与初始化 collection.
时省略空数组时发生的情况一致
你能 post 初始化 collection 的代码吗?
我认为你有:
var opt = {
//... options
}
var c = new Backbone.Collection(opt);
你应该拥有的:
var opt = {
//... options
}
var c = new Backbone.Collection([], opt);
我一直在 Whosebug 上搜索我的问题的答案,但还没有找到有用的东西。
关于我如何设置 collection object 的一些背景知识。在获取时,我将 collection 传递给一个散列,并将 url 设置为 http://localhost/index.php?a=hash
。服务器应该 return 该特定哈希的 12 个名称。
出于某种原因,collection 的第一个模型始终是属性设置为用于获取 collection 数据的字符串的模型,之后的每个模型都非常好.
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...]。当我使用 collection 渲染视图时,这就是我所拥有的:
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...}
正确的模型如下所示:http://i.stack.imgur.com/2Fprv.png
collection的第一个模型是:http://i.stack.imgur.com/5eGdB.png
看起来我的 collection 的第一个模型有一个 attributes
属性 和用于获取实际数据的初始散列。我不知道它是如何设置的,或者在哪里设置。以下是我如何引用 collection:
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));
}
我可以直接删除 collection 的第一个模型,但我想知道为什么会这样,以及是否有比 hack 更好的解决方法。让我知道您是否需要任何其他信息!谢谢。
Collection代码
初始化
var col = new ClientSetList(hash);
ClientSetListBackbone.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
});
}
});
初始化时的第一个参数 Collection 是模型列表,第二个是选项散列,这与使用第一个参数作为选项的视图和模型不同。您所描述的与初始化 collection.
时省略空数组时发生的情况一致你能 post 初始化 collection 的代码吗?
我认为你有:
var opt = {
//... options
}
var c = new Backbone.Collection(opt);
你应该拥有的:
var opt = {
//... options
}
var c = new Backbone.Collection([], opt);