2

这是我的问题:

  • 我有一个包含集合的容器视图。
  • 在页面加载时,我得到一些模型,用它们填充这个集合,然后渲染模型
  • 我开火和事件
  • 当此事件触发时,我想调用我的 api(它根据输入参数返回模型)
  • 然后我想从集合中删除所有现有模型,用我的新模型重新填充,然后渲染模型

这就是我设置模型/集合/视图的方式

var someModel = Backbone.Model.extend({});

var someCollection = Backbone.Collection.extend({
    model: someModel,
    url: "api/someapi"
});

var someView = Backbone.View.extend({

    events: {
        "click #refresh": "refreshCollection"
    },

    initialize: function () {
        this.collection.bind("reset", this.render, this);
    },

    render: function () {
        // render stuff
    },

    refreshCollection: function (e) {
        this.collection.fetch({data: {someParam: someValue});
        this.render();
    }

});

var app = function (models) {
    this.start = function () {
        this.models = new someCollection();
        this.view = new someView({collection: this.models});
        this.view.reset(models);
    };
};

我的兴趣点在这里:

    refreshCollection: function (e) {
        this.collection.fetch({data: {someParam: someValue});
        this.render();
    }

我传入了一些参数,我的 api 返回了一个 json 模型数组。我想摆脱集合中的所有现有模型,并将所有返回的模型放入集合中,然后更新视图(使用渲染())

我知道使用 collection.set 或 collection.reset 可以做到这一点。这两个都采用了一系列模型。我没有要传入的模型数组。

我试过了:

this.collection.fetch({
    data: {someParam: someValue},
    success: function (response) {
        doSomethingWith(response.models)
    }
});

但是当我拿到模型时,我不知道如何处理它们。

任何朝着正确方向推动的人将不胜感激!

4

1 回答 1

9

来自精美手册

拿来 collection.fetch([options])

[...]当模型数据从服务器返回时,它使用set(智能)合并获取的模型,除非您通过{reset: true},在这种情况下,集合将(有效地)重置

因此,您只需要包含reset: true在选项中并fetch调用reset以将集合的内容替换为获取的模型:

this.collection.fetch({
    data: { ... },
    reset: true
});
于 2013-09-21T05:33:47.870 回答