2015-02-14 2 views
0

Я только начал изучать «Backbone.js», сейчас я следую this видеоуроку. Для шаблонов, я просто держал свой шаблон, чтобы быть простыми, как это -Переменная, проходящая по шаблону Backbone

<script type="text/template" id="songlist_template"> 
<%_.each(songs, function(song){}); %> 
<h1>Loaded</h1> 
</script>  

и моего взгляд расширенного как-

var SongList=Backbone.View.extend({ 
el:'.page', 
render: function(){ 
    var that=this; 
    var songs=new Songs(); 
    songs.fetch({ 
     success:function(){ 
      var temp=_.template($("#songlist_template").html()); 
      var html=temp(songs); 
      that.$el.html(html); 
      }, 
     error: function (collection, response, options) { 
      alert("error!! "+response.responseText); 
      }}) 
}}); 

Все прекрасно, пока я не достигну раздел, где журнал консоли says-

шаблонирования
Uncaught ReferenceError: songs is not defined is not defined. 

по documentation, я думаю, что мой синтаксис шаблона в порядке, и я прошел правильный извлеченные данные. Кроме того, я также определил переменную песни. Было бы полезно, если бы кто-то мог указать на мою ошибку.

Полный код here и json file here.

ответ

0

исправить ваш вопрос передать песни как массив температуры ({песни: songs.models})

в успех обратного вызова можно добавить мелодии параметр

success:function (songs){ 
      var temp=_.template($("#songlist_template").html()); 
      var html=temp({songs:songs.models}); 
      that.$el.html(html); 
      }, 

http://backbonejs.org/#Collection-fetch

Параметры hash имеют успех и обратные вызовы, которые будут переданы (сбор, ответ, параметры) в качестве аргументов

+0

Я попытался это слишком, но все еще получаю ту же ошибку. –

+0

, чтобы исправить вашу проблему, передайте песни в виде массива temp ({песни: песни}) –

+0

, пожалуйста, просмотрите мой код. –

0

Из документации template Underscore в:

При оценке функции шаблона, передать объект данных, который имеет свойства, соответствующих свободных переменных шаблона

(Акцент)

Что @VladuIonut пытается - cor прямо - объясните, что вы должны передать объект, содержащий свойства, которые вы ссылаетесь в своем шаблоне.

Если ваша коллекция песен не имеет свойства, также называемого songs для использования в качестве шаблона, оно не будет выполнено с использованием этого неопределенного ReferenceError.

Ваш шаблон вызов должен выглядеть следующим образом:

var html=temp({ 
    "songs": songs 
});