2015-10-03 4 views
0

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


HTML:

<script type="text/template" id="search_template"> 
    <div>Name comes here: <h4><%=name%></h4></div> 
    <input type="text" id="search_input" /> 
    <input type="button" id="search_button" value="Search" /> 
</script> 
<div id="search_container"></div> 

JS:


$(function(){ 
var SearchView = Backbone.View.extend({ 
    initialize: function(){ 
     this.render(); 
    }, 
    render: function(){ 
     var tmpl = $('#search_template').html(), 
      compiled = _.template(tmpl, { name:'hello' }); 
     $(this.el).html(compiled); 
    } 
    }); 
    var search_view = new SearchView({ el: "#search_container" }); 
}); 

Проблема заключается в том, что не может увидеть ключ "имя", которое должно быть передано в шаблон , Я все еще не понимаю, почему.

Весь образец кода находится здесь: http://plnkr.co/edit/7fV2azTh6cpjmUxIBHvJ?p=preview

ответ

2

Вы не используете Underscore's template method правильно.

Этап компиляции не содержит, где вы передаете свои параметры для замены шаблоном. Скорее, этап компиляции создает функцию. Результат вызова скомпилированной функции с параметрами модели представления в качестве первого аргумента вернет строку вашего шаблона с замененными значениями вашей модели представления.

render: function() { 
    var tmpl = $('#search_template').html(), 
    compiled = _.template(tmpl); 
    this.$el.html(compiled({ name:'hello' })); 
} 

дополнительный пункт: Обратите внимание на то, как Backbone View уже дает нам удобный this.$el, поэтому нам не нужно делать $(this.el) шаг снова.

+0

жаль, что, кажется, я смотрел немного obsole te tutorial и не заметили изменений на странице spec :( – srgg6701