Javascript 主干收集';解析后的s模型
我有这个模型和它的收藏:Javascript 主干收集';解析后的s模型,javascript,json,backbone.js,backbone.js-collections,backbone-model,Javascript,Json,Backbone.js,Backbone.js Collections,Backbone Model,我有这个模型和它的收藏: app.models.Result= Backbone.Model.extend({ idAttribute: 'uid', initialize: function () { this.set('name', this.get('name').replace(' ', '').substring(0, 20)); }, }); app.models.ResultList = Backbone.Collection.ext
app.models.Result= Backbone.Model.extend({
idAttribute: 'uid',
initialize: function () {
this.set('name', this.get('name').replace(' ', '').substring(0, 20));
},
});
app.models.ResultList = Backbone.Collection.extend({
model: app.models.Result,
url: 'http://localhost/stuff',
parse: function (response, options) {
this.add(response.data);
console.log(this);
return response.data;
},
});
然后我在视图的initialize()
函数中使用它,如下所示:
var that = this;
this.collection = new app.models.SearchList();
this.collection.fetch({
dataType: 'jsonp',
success: function () {
console.log(that.collection);
that.collection.each(function (resultModel) {
console.log('ok');
});
}
});
通过这段代码,我几乎得到了我想要的,但是当我查看第二个log()
时,我可以看到name
属性与获取的JSON中的属性相同
我猜是因为我只是返回了响应.data
,所以我将其修改为this
。在这种情况下,我得到一个错误:
未捕获的TypeError:无法调用未定义的方法“replace”
所以我把那句话注释掉了。现在我可以看到所有的模型都不见了。数组中只有一个模型,但不是JSON中的模型
我心爱的模特怎么了?他们在哪里?我应该怎么救他们吗?在第一个日志中,
这个
指向正确的完整集合,那么为什么不返回这个
给我相同的正确集合。当您返回响应时,数据是正确的。
来自集合。解析
。引述:
函数传递原始响应对象,并应返回要添加到集合中的模型属性数组
我认为您的问题在于您正在调用this。从集合中添加。解析-您不需要执行此操作,因为调用集合。解析的函数将为您处理此问题
我认为,当您这样做时,模型是在调用add
时添加的,但是集合调用Collection.set
——这会导致您修改的所有名称值被服务器版本替换
回应您的评论:Collection.set
作为集合的一部分被调用。fetch
-这正是主干默认的工作方式(尽管您可以让它调用Collection.reset
,如果您愿意,通过传入一个选项)。解决问题的最简单方法就是删除集合。从parse
函数中添加调用-这样集合。set
将按照您的预期运行
初始化
函数仅在初始化模型时调用。如果您想在第一次创建模型时更改模型的属性,这是一个地方。但是,您可以通过调用this.add
,然后通过从parse
返回数据来更新该数据来创建模型,这会导致覆盖初始化更改
另一种方法是更新parse
函数,根据需要转换数据,然后返回该函数
或者,如果要设置的值为name
,则可以覆盖模型中的set函数,以转换传递的数据。感谢您的回复。我明白你在说什么,但是为什么要调用集合.set
?更重要的是:我如何解决这个问题?如何将更改应用于模型中的name
属性?我认为初始化函数是正确的方法。如果set
覆盖了我在那里所做的操作,那么初始化的目的是什么?@totymedli我添加了更多的细节,并给出了具体的操作说明。简单地说:不要调用这个。在解析中添加,非常感谢!现在我完全理解了整个过程,你给我的建议让代码工作得很有魅力!再次感谢你。