使用marionette从骨干提取中添加收集结果

时间:2013-02-27 16:27:10

标签: javascript backbone.js fetch marionette

我正在使用Backbone 0.9.2,它仍然有一个{add: true}来获取,而牵线木偶1.0.0.b4

所以场景是我在页面加载时将一个集合渲染到屏幕上(这很有效)。现在我想用另一个fetch调用添加到该集合。

根据我的理解,marionette.js每次都会使用重置功能覆盖add函数。

我查看了initializeEvents函数并将“reset”事件绑定到我自己的事件。在我的活动中,我调用了this.collection.add();,但是它没有将数据呈现到模板中,因为我还没有调用this.render();

这就是它变得很糟糕的地方。所以我打电话给this.render();并呈现数据。好极了!但是,在下一次提取this.render()时会重置数据(我猜测木偶有自己的渲染功能,总是重置而不是添加)

initialEvents: function () {
        if (this.collection) {
            this.bindTo(this.collection, "add", this.addChildView, this);
            this.bindTo(this.collection, "remove", this.removeItemView, this);
            this.bindTo(this.collection, "reset", this.resetted, this);
        }
    },
    resetted: function (item, collection, options) {

        // this works, but doesnt render data into the template, just empty divs
        this.collection.add();

        // this.render() resets the collection.
        this.render();

    },

Item = collection (with all my data)
Collection  = {} (literally)
options = undefined

是的我知道重置是最糟糕的功能名称,但无论如何,它的sudo代码。

我也尝试过marionettes“collectionEvents”,但是在渲染发生之后发现了这些火。

1 个答案:

答案 0 :(得分:0)

在Backbone模型和集合上,有一个方法可以覆盖称为parse。

var B = Backbone.Collection.extend({
   ............,
   model: A,
   parse: function (data) {
       // manipulate your data here then return it
       return data;
   }
});

当我想在同一个调用中返回多个集合并将数据保存到集合的属性时,我使用此功能。

var B = Backbone.Collections.extend({
    ..................,
    model: A,
    pagingCollection: {},
    parse: function(data) {
       this.pagingCollection = data.PageCollection;
       return data.CoreData;
    }
});