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)
}
});
但我不知道当我得到这些模型时该怎么办
任何被推向正确方向的人都将不胜感激 来自:
fetchcollection.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
。