2013-05-12 4 views
0

Я не могу получить приложение backbone.js, чтобы взять мою модель. Кто-нибудь знает, что происходит?Backbone JS не обрабатывает мою модель

Сайт http://www.sheetmusicondemand.net/backbone2.html

код есть и здесь:

<!DOCTYPE html> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta charset="utf-8" /> 
     <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.1/css/bootstrap.min.css" /> 
     <title></title> 
    </head> 
    <body> 
     <div class="container"> 
      <h1>Backbone Demo</h1> 
      <hr /> 
      <div class="page"> 
      </div> 
     </div> 

     <script type="text/template" id="song-list-template"> 
      <h3>Songs</h3> 
      <% _.each(songs, function(song) { console.log song.toJSON();%> 

      <h4>Title: <%= song.title %></h4> 
      <% } %> 
     </script> 

     <!-- <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
     <script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script> 
     <script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>--> 
     <script src="/Scripts/jquery-1.8.2.min.js"></script> 
     <script src="/Scripts/underscore.js"></script> 
     <script src="/Scripts/backbone.js"></script> 
     <script> 
      $.ajaxPrefilter(function (options, originalOptions, jqXHR) { 
       options.url = 'http://www.onlinesheetmusic.com/api2/' + options.url; 
      }); 

      function htmlEncode(value) { 
       return $('<div/>').text(value).html(); 
      } 

      function htmlDecode(value) { 
       return $('<div/>').html(value).text(); 
      } 

      $.fn.serializeObject = function() { 
       var o = {}; 
       var a = this.serializeArray(); 
       $.each(a, function() { 
        if (o[this.name] !== undefined) { 
         if (!o[this.name].push) { 
          o[this.name] = [o[this.name]]; 
         } 
         o[this.name].push(this.value || ''); 
        } else { 
         o[this.name] = this.value || ''; 
        } 
       }); 
       return o; 
      }; 

      var Songs = Backbone.Collection.extend({ 
       url: '/product' 
      }); 

      var Song = Backbone.Model.extend({ 
       urlRoot: '/product' 
      }); 

      var SongList = Backbone.View.extend({ 
       el: '.page', 
       render: function() { 
        var that = this; 
        var songs = new Songs(); 
        songs.fetch({ 
         success: function (songs) { 
          console.log($(songs).serializeObject()); 
          var template = _.template($('#song-list-template').html(), { songs: songs.models }); 
          that.$el.html(template); 
         } 
        }); 
       } 
      }); 

      var Router = Backbone.Router.extend({ 
       routes: { 
        '': 'home' 
       } 
      }); 

      var songList = new SongList(); 

      var router = new Router(); 
      router.on('route:home', function() { 
       songList.render(); 
      }); 

      Backbone.history.start(); 
     </script> 
    </body> 
    </html> 

Он постоянно возвращается неперехваченная Ошибка синтаксиса и объект пуст. Все, что я пытаюсь сделать, это заставить обработать возвращаемые данные. Почему это не печатает названия песен? Что мне не хватает?

+0

Вы можете объявить 'Song' модель до сбора, а также указать' модель: Song' так же, как [документы] (HTTP://backbonejs.org/#Collection-model) внутри коллекции 'Songs' и попробовать? – Cyclone

+0

Я понял. Я просто тупой и забыл закрыть каждый из них в шаблоне. Я оставил его как} без); теперь он отлично работает. – tim95030

+0

Поздравляем :-) – machineghost

ответ

1

Я думаю:

<% _.each(songs, function(song) { console.log song.toJSON();%> 

должно быть:

<% _.each(songs, function(song) { console.log(song.toJSON());%> 
+0

Это устранило первоначальную проблему, но у меня все еще проблема с данными, которые почему-то не работают. Я обновил код на сайте, и теперь вы увидите, что я получаю сообщение об ошибке: 'Uncaught SyntaxError: Неожиданный токен; underscore.js: 997' – tim95030

+0

Вообще говоря, если вы получите ответ в Stack Overflow и вам нужно задать новый вопрос, лучше начать новый вопрос (только с информацией, относящейся к новому вопросу), а не редактировать свой вопрос превратить его в новый вопрос. – machineghost

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