2011-12-23 6 views
0

Вот мой код. Не стесняйтесь сказать мне, что я делаю неправильно или правильно. Я пытаюсь сохранить все в объекте PhishVids. Если это неправильный способ сделать что-то, сообщите мне.Получить данные JSON в представлении для Backbone.js

My JSON хранится в /shows/YEAR.json. Диапазон лет от 1987-2011. Кажется, я не могу заставить JSON загрузиться, так может ли кто-нибудь указать мне в правильном направлении?

var PhishVids = { 
    Models: { 
     Show: Backbone.Model.extend({ 
      defaults: { 
       showid: 'show id', 
       year: 'year', 
       month: 'month', 
       day: 'day', 
       venue: 'venue' 
      } 
     }) 
    }, 

    Views: { 
     Show: Backbone.View.extend({ 
      el: $('#content'), 
      initialize: function() { 
       this.model.fetch(); 
       this.model.bind('change', this.render, this); 
      }, 
      render: function(event) { 
       var compiled_template = _.template($("#shows-template").html()); 
       this.el.html(compiled_template(this.model.toJSON())); 
       return this; //recommended as this enables calls to be chained. 
      }, 
      events: { 
       "click .show": "showClick" 
      }, 
      showClick: function(event) { 

      } 
     }) 
    }, 

    Collections: { 
     ShowList: Backbone.Collection.extend({ 
      parse: function(response) { 
       return response.items; 
      } 
     }) 
    } 

}; 

Показать Шаблон:

<script type="text/template" id="shows_template"> 
    <a href='/<%= year %>/<%= month %>/<%= day %>' class='show <%= month %> <%= day %>' id='<%= showid %>'><%= month %>/<%= day %></a> 
    <div class='venue'><%= venue %></div> 
</script> 
+0

В JS вас есть '# шоу-template' и в шаблоне идентификатор' show_template'. – kubetz

+0

Вы правы, спасибо. Но это не полностью решает мою проблему. – switz

ответ

1

Я вижу несколько проблем здесь. Не видя код вызова, пример вашего JSON и немного узнав о том, что вы пытаетесь сделать, невозможно понять, что вы на самом деле делаете. Однако вот несколько вещей, которые я заметил сразу:

1) Когда вы выбираете коллекцию, коллекция будет создавать экземпляры модели из полученных ею данных (которые должны быть массивом объектов). Он будет использовать this.model как тип, но вы не определили, что модель должна быть ...

2) Ни ваша модель, ни ваша коллекция имеет либо url или urlRoot членов, которые бы сказать им, как принести

3) В вашем объекте view ваша функция инициализации (которая вызывается сразу после построения объекта) ссылается на этот.model, который не был установлен нигде и поэтому не определен

Обычно, если вы собираетесь использовать что-то вроде этого, вы должны сначала создать экземпляр коллекции (new object()), а затем вызвать. fetch(), чтобы получить данные. fetch() может либо принять объект с успехом, либо ошибку как обратные вызовы или вернуть объект отложенного jquery (если вы используете jquery), который вы можете использовать .done (..) и .fail (..), чтобы узнать, когда он закончил.

Затем вы можете передать модель в качестве опции (часть объекта) в новый ... Просмотреть ({model: model_you_want}) и т. Д. И использовать это для рендеринга.

Надежда, что помогает

+0

Fetch возвратил успех, но 'done' и' fail' были пустыми. – switz

+0

вы, вероятно, либо не используете jquery, либо не используете достаточно новую версию jQuery. С помощью jQuery (current ver) .fetch() вернет отложенный объект, поэтому collectObj.done (function() {/ * здесь вы можете использовать collectObj * /}). Fail (function (err) {/ * здесь вы обрабатываете ошибка */ }); будет работать – taxilian

+0

Я использую jQuery 1.7.1 – switz

Смежные вопросы