1

我正在使用 Backbone 开发一个新应用程序,并且还没有编写后端 API,所以我正在尝试使用我的项目本地的 JSON 数据文件。我将它的位置设置为 urlRoot 并且能够获取它并接收 jqXHR 对象。但是,我不确定如何与 responseText 交互(假设这是我基于对象的 console.log 输出所需要的)。

这是我发现的最接近的问题,但没有以最终答案结束:骨干模型仅返回和对象,或 JSON {readyState : 1}

var JobListings = Backbone.Model.extend({
  urlRoot: 'scripts/app/data/listings.json'
});

// Instantiate the model
var jobListings = new JobListings();

console.log(jobListings.fetch()); // Returns jqXHR object
console.log(jobListings.attributes); // Returns empty object

如何获取我的 JSON 数据?另外,它应该在模型中而不是集合中,对吗?我对基于其他开发人员使用它们的集合的作用有点模糊。我认为模型包含数据,而集合是模型集。

我的目标是为数据建立两个模型。一个接收需要清理的脏 JSON,第二个是我输出的干净数据以供应用程序使用。任何帮助深表感谢。

编辑:

我的 JSON 片段......我仍然不知道如何获取我的数据。我确信我不必事先查看我的数据。

[
  {
    "jobId": "1",
    "applyUrl": "http://google.com",
    "title": "President of the World",
    "trackingCode": "1",
    "jobDescription": "Stuff",
    "requiredSkills": "Stuff",
    "requiredExperience": [],
    "postingDate": "2013-07-12T11:07:50Z",
    "jobLocation": {
      "countryCode": "US",
      "region": "California",
      "municipality": "Santa Monica"
    },
    "category": "Life",
    "businessUnit": [],
    "positionType": "Full-Time"
  }
]
4

2 回答 2

1

'Backbone.Model'包含数据

'Backbone.Collection'是一组模型。就像你可以定义它如下:

var Library = Backbone.Collection.extend({
  model: Book
});

您通常不会直接使用 jqXHR。获取数据后,您可以使用get操作“逐个字段”(或逐个属性)访问它:

note.get("title")

您可以使用set操作编辑数据:

note.set({title: "March 20", content: "In his eyes she eclipses..."});
book.set("title", "A Scandal in Bohemia");

您可以使用toJSON操作返回数据的副本(称为属性)

Backbone 还将使用hasChanged跟踪数据是否脏

于 2013-07-18T21:15:45.623 回答
0

查看您的代码,JobListing 将是一个包含工作列表数据的模型。JobListings 将是所有 JobListing 模型的集合:

var JobListing = Backbone.Model.extend();

var JobListings = Backbone.Collection.extend({,
  model: JobListing,
  url: 'scripts/app/data/listings.json',
  parse: function(data) {
     // Not sure about your json structure, but you could do the following
     // Do your cleanup here
     return data.joblistings;
  }
});

// Instantiate the collection
var jobListings = new JobListings();

var req = jobListings.fetch();

req.done(function() {
  // contains all job listings
  console.log(jobListings.models);
});
于 2013-07-19T11:34:00.613 回答