将数据存储在模型&集合呼叫&取来

Storing Data in Model & Call from Collection & Fetch

本文关键字:amp 集合 呼叫 取来 数据 存储 模型      更新时间:2023-09-26

收集

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

我的Fetch在控制器(列表)视图中,我用更新了过滤器的模型

  var jobListFilterModelUpdate = new JobListFilterModel();
            jobListFilterModelUpdate.set({value:isChecked});

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

这将是一个漫长的答复。请耐心等待。

问题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集的更新模型视图中?

一个系列成为一个模型意味着什么?苹果不可能是苹果树,反之亦然。让我说这个问题是一个矛盾修辞法,然后试着回答困扰你的真正问题。

您可以从服务器获取模型的一个实例,也可以使用集合的一个对象获取一大堆实例。当您使用集合对象获取模型时,服务器返回的数据将被解析并存储在集合的models属性中。您可以调用collection.models来获取模型的原始数组,但首选方法是使用collection.get

另一方面,当您在客户端创建模型时,它是一个空对象。您可以使用set()为其添加属性。但这个模型对象仍然是短暂的,当你把页面留在浏览器中时,它就会消失。要持久化其数据,需要调用save()方法。save()使用sync()将数据持久化到您想要的任何数据存储中。默认情况下,它会将您的数据POST回服务器。通过覆盖sync()的默认行为,您将能够根据需要将数据保存到localStorage。

最后一件事是,在客户端创建的模型实例默认情况下不会成为集合的一部分。您需要使用集合对象的add()方法将该模型添加到现有集合中。

更新以回答评论中的问题:

我更新了问题2,我不明白110是模型,我的模型不发送或接收任何json。我的控制器有。

是的,控制器必须将您的模型编码为json,然后将其发回。您必须确保返回的json具有一个具有一定值的id属性。有一种方法可以自定义将使用哪个属性作为标识,但我们还不了解。

而且,如果我在调用URL之后获取,我就不能将值传递到URL中:(

好吧,我不清楚。你必须进一步澄清。