Backbone获取并使用jqXHR对象

时间:2013-07-18 20:41:59

标签: javascript ajax json backbone.js jqxhr

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

这是我发现的最接近我的问题,但最终答案没有结束:backbone model is only returning and object, or 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"
  }
]

2 个答案:

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

跟踪数据是否脏

答案 1 :(得分: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);
});