BackboneJS — Как создать модель и / или коллекцию из файла JSON

#json #backbone.js

#json #backbone.js

Вопрос:

У меня есть файл JSON, который мне нужно отобразить в моем магистральном приложении, используя HandlebarsJS , но я не совсем уверен, как этого добиться.

Вот структура моего файла JSON:

 data: {title:Win special things, startDate:null, endDate:2014-08-04T10:00:00.000Z,privacy:public,…}
  contest_id: 11
  endDate: "2014-08-04T10:00:00.000Z"
  privacy: "public"
  question: {title:When was "The Black Album" released?, question_id:11,…}
     answers: [{answer_id:16, answer:1992, correct:false, createdAt:2014-06-23T08:09:17.000Z,…},…]
           0: {answer_id:16, answer:1992, correct:false, createdAt:2014-06-23T08:09:17.000Z,…}
           1: {answer_id:17, answer:1993, correct:false, createdAt:2014-06-23T08:09:17.000Z,…}
           2: {answer_id:18, answer:1991, correct:true, createdAt:2014-06-23T08:09:17.000Z,…}
           3: {answer_id:19, answer:1990, correct:false, createdAt:2014-06-23T08:09:17.000Z,…}
              answer: "1990"
              answer_id: 19
              contest_questionId: 11
              correct: false
              createdAt: "2014-06-23T08:09:17.000Z"
              updatedAt: "2014-06-23T08:09:17.000Z"
      question_id: 11
      title: "When was "The Black Album" released?"
  startDate: null
  status: "editing"
  title: "Win special things"
 

Я пытался сделать это:

 SingleCompetition.SingleCompetitionCollection = Backbone.Collection.extend({
    url: function() {
        return App.APIO   '/i/contest/'   11;  // *('11' is the id of the contest)*
    }
});
 

но когда я утешаю.зарегистрируйте коллекцию после singleCompetitionCollection.fetch() — она сообщает мне undefined , и она ничего не возвращает.

Как я могу это сделать?

Обновить

Ок, изменен на :

 SingleCompetition.SingleCompetitionModel = Backbone.Model.extend({
    url: function() {
        return App.APIO   '/i/contests';
    },

    defaults: {
        "data": []
    }
});
 

и мой HTML-файл HandlebarsJS выглядит так (просто немного, просто в качестве примера):

  {{#each this}}
  <li>
     <h2>{{title}}</h2>
 </li>  
{{/each}}
 

Он показывает <h2> пустой. Консоль сообщает мне, что data JSON доступен, поэтому я думаю, в чем может быть проблема?

Комментарии:

1. 1) json недопустим 2) коллекция SingleCompetitionCollection не имеет модели 3) нет модели конкуренции 4) нужна функция синтаксического анализа для обработки такого json

2. Хорошо, JSON действительно действителен 🙂 и добавлена модель сейчас, пожалуйста, проверьте обновленный код выше

Ответ №1:

попробуйте это

 SingleCompetition.SingleCompetitionCollection = Backbone.Collection.extend({
            model: SingleCompetition.SingleCompetitionModel,
            url: json_url_here,

            initialize: function() {
                this.fetch({ type:"GET" }).error(function(){
                    console.error("error");
                });
            }
        });
 

Ответ №2:

Я исправил это сам, просто сделав это:

 {{#each data}}
<li>
  <h2>{{title}}</h2>
</li>  
{{/each}}
 

Теперь он отображает то, что я хочу!

Спасибо за помощь, хотя!