Javascript 主干在获取时重置集合

Javascript 主干在获取时重置集合,javascript,backbone.js,backbone-events,Javascript,Backbone.js,Backbone Events,这是我的问题: 我有一个保存集合的容器视图 在页面加载时,我得到一些模型,用它们填充这个集合,然后呈现这些模型 我喜欢火和事件 当触发此事件时,我想调用我的api(它根据输入参数返回模型) 然后,我希望从集合中删除所有现有模型,重新填充新模型,然后渲染模型 这是我设置模型/集合/视图的方式 var someModel = Backbone.Model.extend({}); var someCollection = Backbone.Collection.extend({ mode

这是我的问题:

  • 我有一个保存集合的容器视图
  • 在页面加载时,我得到一些模型,用它们填充这个集合,然后呈现这些模型
  • 我喜欢火和事件
  • 当触发此事件时,我想调用我的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模型数组。我想删除集合中的所有现有模型,并将所有返回的模型放入集合中,然后更新视图(使用render()

我知道这可以通过collection.set或collection.reset实现。这两种方法都采用了一系列模型。我没有一系列的模型要传递

我试过:

this.collection.fetch({
    data: {someParam: someValue},
    success: function (response) {
        doSomethingWith(response.models)
    }
});
但我不知道当我得到这些模型时该怎么办

任何被推向正确方向的人都将不胜感激

来自:

fetch
collection.fetch([options])

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

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

this.collection.fetch({
    data: { ... },
    reset: true
});

这是行不通的。我在获取之前和之后都做了console.log(this.collection.models)(reset:true)。收藏没有改变。你知道为什么这样不行吗?
console.log(this.collection.toJSON())
fetch
调用之前和之后说了什么?您确定您一直在等待服务器响应
fetch
AJAX调用吗?啊。我不熟悉javascript和异步思维方式。就是这样。很酷,你很快就会习惯异步的东西。还要注意
console.log
,它将一个实时引用放入控制台,而不是某个对象当前状态的快照,因此调用
toJSON