【问题标题】:Backbone reset a collection on fetchBackbone 在获取时重置集合
【发布时间】:2013-09-21 05:16:16
【问题描述】:

这是我的问题:

  • 我有一个包含集合的容器视图。
  • 在页面加载时,我得到一些模型,用它们填充这个集合,然后渲染模型
  • 我开火和事件
  • 当此事件触发时,我想调用我的 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)
    }
});

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

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

【问题讨论】:

    标签: javascript backbone.js backbone-events


    【解决方案1】:

    来自fine manual

    获取 collection.fetch([options])

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

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

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

    【讨论】:

    • 这不起作用。我在获取之前和之后做了 console.log(this.collection.models) (重置:true)。集合没有改变。你有什么想法为什么这不起作用?
    • console.log(this.collection.toJSON()) 在调用fetch 之前和之后说了什么?您确定您已经等到服务器响应 fetch AJAX 调用了吗?
    • 啊。我是 javascript 和异步思维方式的新手。就是这样。
    • 酷,你很快就会习惯异步的东西。 console.log 也要小心,它会将实时引用放入控制台,而不是某些当前状态的快照,因此会调用 toJSON
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多