使用来自JSON文件的数据创建模型的Backbone集合

时间:2014-02-28 13:56:49

标签: javascript json backbone.js handlebars.js

我刚刚开始使用Backbone.js并认为我有点理解它的概念。

背景故事: 我用jQuery和Handlebars做了一个交互式测验,现在我想迁移到Backbone。 测验从同一目录中的静态allQuestions.json文件中读取所有问题。 该文件如下所示:

{
"Q1" : {"question": "Vem är HON-chattens true Admin?",
"choices": ["Kattigpelika", "Bangan", "Naldor"],
"correctAnswer":0},

"Q2" : {"question":"Vem är chattens true mad son?",
"choices": ["Bangan","Grev3n","Mettapod"],
"correctAnswer":1
}
ETC...

(它的格式正确,因为我之前使用过它(使用$ .getJSON)

我现在正在尝试制作一个模型:

var Question = Backbone.Model.extend({
initialize:function(){
    console.log("Created a model");
    }
);

这是Collection的一部分:

var Questions = Backbone.Collection.extend({
model : Question,
url : "allQuestions.json"

});

我想要这个功能:

allQuestions.fetch({
success:function(){
    console.log(allQuestions);
}
});

为.json文件中的每个对象创建一个新模型并将其放入集合中。 这可能吗?我在哪里想错了?

这是在我的电脑上本地完成的。

2 个答案:

答案 0 :(得分:1)

理想情况下,您可以将数据放在由Web服务器发送的视图中并加载(请参阅http://backbonejs.org/#FAQ-bootstrap)。

否则,您需要重新定义收藏集的sync方法,以便在方法“已阅读”时拨打$.getJSON,否则您会像往常一样致电Backbone.sync

答案 1 :(得分:1)

这里的问题不是Backbone,而是JSON对象的结构。如果您可以将其修改为类似的内容,则会为每个问题加载不同的模型:

[
 {
  "id": "Q1", 
  "question": "Vem är HON-chattens true Admin?",
  "choices": ["Kattigpelika", "Bangan", "Naldor"],
  "correctAnswer":0 
 },
 {
  "id": "Q2", 
  "question":"Vem är chattens true mad son?",
  "choices": ["Bangan","Grev3n","Mettapod"],
  "correctAnswer":1
 }
]

您可以在此JSFiddle中查看它是否有效。