在模型和模型中存储数据来自Collection&取

时间:2013-11-19 10:51:14

标签: javascript php jquery backbone.js underscore.js

集合

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});

现在,模型已更新,使用新的数据集而不是旧的默认值。如上所述。我问的是,如果我管理从模型中检索数据(更新的数据)数据是否仍然是我从该控制器(列表)视图设置的任何数据(至少对于这个“会话”)

1 个答案:

答案 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 :(

好的,这对我来说并不清楚。你必须进一步澄清这一点。