1

我正在使用 Backbone 0.9.2,它仍然有{add: true}一个 fetch 和 marionette 1.0.0.b4

所以场景是我在页面加载时在屏幕上呈现了一个集合(这很好用)。现在我想通过另一个 fetch 调用添加到该集合中。

据我所知,marionette.js 每次都会用重置函数覆盖 add 函数。

我查看了 initializeEvents 函数并将“重置”事件绑定到我自己的事件。在我的事件中,我调用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

是的,我知道 resetted 是最糟糕的函数名称,但无论如何,它的 sudo 代码。

我也尝试过木偶“collectionEvents”,但在渲染发生后发现这些火灾。

4

1 回答 1

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;
    }
});
于 2013-03-13T15:18:57.880 回答