集合
define([
'jquery',
'underscore',
'backbone'
], function($, _, Backbone){
console.log("Loaded");
var Jobs = Backbone.Collection.extend({
url: function () {
return 'http://domain.com/api/jobs?page='+this.page+''
},
page: 1
});
return Jobs;
});
模型
define([
'underscore',
'backbone'
], function(_, Backbone){
var JobFilterModel = Backbone.Model.extend({
defaults: {
T: '1',
PT: '1',
C: '1',
I: '1'
}
});
// Return the model for the module
return JobFilterModel;
});
在我的一个视图中,我设置了模型
var jobListFilterModelUpdate = new JobListFilterModel();
jobListFilterModelUpdate.set({value:isChecked});
我正在尝试从Collection中检索MODEL,这样我就可以使用URL发送正确的QUERY。
问题1
如何从集合中检索模型
问题2
My Fetch在Controller(List)视图中,我用
更新了Filter的模型 var jobListFilterModelUpdate = new JobListFilterModel();
jobListFilterModelUpdate.set({value:isChecked});
现在,模型已更新,使用新的数据集而不是旧的默认值。如上所述。我问的是,如果我管理从模型中检索数据(更新的数据)数据是否仍然是我从该控制器(列表)视图设置的任何数据(至少对于这个“会话”)
答案 0 :(得分:2)
这将是一个很长的回复。请耐心等待。
问题1
如何从集合中检索模型
首先需要像这样更新集合定义:
var Jobs = Backbone.Collection.extend({
model: JobFilterModel, /*This was missing before.*/
url: function () {
return 'http://domain.com/api/jobs?page='+this.page+''
},
page: 1
});
之后,您可以从这样的集合对象中获取模型:
var job = jobs.get(110);
在上面的代码中,110是您想要的模型的id。到目前为止,您应该清楚所有模型都应该在服务器发送的JSON响应中设置id属性。
问题2
检索到的集合是否为具有i Set数据的更新模型 在视图?
集合成为模特甚至意味着什么?苹果不能是苹果树,反之亦然。我只想说这个问题是矛盾的,然后试着回答困扰你的真正问题。
您可以从服务器获取模型的一个实例,也可以使用集合的对象获取大量实例。使用集合对象获取模型时,服务器返回的数据将被解析并存储在集合的models属性中。您可以调用collection.models
来获取原始模型数组,但首选方法是使用collection.get
。
另一方面,当您在客户端创建模型时,它是一个空对象。您可以使用set()
向其添加属性。但是这个模型对象仍然是短暂的,当你将页面留在浏览器中时它会消失。要保留其数据,您需要调用save()
方法。 save()
使用sync()
将数据保存到您想要的任何数据存储区。默认情况下,它会将您的数据POST回服务器。通过覆盖sync()
的默认行为,您可以根据需要将数据保存到localStorage。
最后一点,默认情况下,在客户端创建的模型实例不会成为集合的一部分。您需要使用集合对象的add()
方法将该模型添加到现有集合中。
更新以回答评论中的问题:
我更新了问题2,我不明白110是id的 模型,我的模型不发送或接收任何json。我的控制器。
是的,控制器必须将您的模型编码为json,然后将其发回。您必须确保返回的json具有带有某个值的id属性。有一种方法可以自定义哪个属性将被用作身份,但是我们还没有去那里。
而且,如果我在调用URL后获取GET,则无法将该值传递给URL :(
好的,这对我来说并不清楚。你必须进一步澄清这一点。