Backbone集合,获取特定属性

时间:2015-12-29 20:07:52

标签: javascript backbone.js collections console.log

我在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中,生成以下控制台日志

console log of collection

其中this.collection.currentPagethis.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;
},

有人在下面说过我不允许在集合上设置属性(除了通过构造函数,但是在获取之前)。那么我怎样才能将这个响应标题数据放到我的视图中呢?

2 个答案:

答案 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');

哪个应该能为您提供所需的功能。