我在Backbone集合上设置了一个属性currentPage
,但我似乎无法专门记录它。
onRender: function () {
App.log('this.collection.currentPage onRender')
App.log(this.collection)
App.log(this.collection.accountID)
App.log(this.collection.currentPage)
App.log(this.collection.get('currentPage'))
}
我执行fetch然后show,在onRender中,生成以下控制台日志
其中this.collection.currentPage
和this.collection.get('currentPage')
为undefined
,即使我可以在this.collection
的日志输出中将currentPage视为已定义(“2”)属性。 this.collection.accountID
正在按照我的预期currentPage
开展工作。
我做错了什么?
编辑:我在success
.fetch
设置属性,因为数据是在响应标头中返回的。像这样的东西,
getAccountSegments: function (accountID) {
var accountSegmentsCollection = new Entities.Collections.AccountSegmentCollection({
accountID: accountID
});
accountSegmentsCollection.fetch({
success: function (collection, response, options) {
collection.currentPage = options.xhr.getResponseHeader('X-Current-Page');
}
});
return accountSegmentsCollection;
},
有人在下面说过我不允许在集合上设置属性(除了通过构造函数,但是在获取之前)。那么我怎样才能将这个响应标题数据放到我的视图中呢?
答案 0 :(得分:0)
主干js中的集合不允许您设置属性。 在主干集合中存储元信息的最佳方法是通过普通的javascript对象。
例如:
var myCollection = Backbone.Collection.extend({
model: myModel,
metaInfo: {
currentPage: "2"
}
});
然后,您可以使用this.collection.metaInfo.currentPage
答案 1 :(得分:0)
get
有点令人困惑。在Backbone Models中有属性,但集合没有,这意味着集合上的get
与模型上的get
不同。
get
检索属性,而在集合上它将返回一个模型(通过id)。您可以将集合扩展为具有属性getter和setter:
var pageCollection = Backbone.Collection.extend({
getAttribute: function(attr) {
return this.attributes?this.attributes[attr]:null;
},
setAttribute: function(attr,val){
this.attributes = this.attributes || {};
this.attributes[attr] = val;
}
});
然后您可以设置currentPage属性:
pageCollection.setAttribute('currentPage', 'myPage');
并检索它:
App.log(pageCollection.getAttribute('currentPage');
哪个应该能为您提供所需的功能。