0

У меня есть шаблон подчеркивания, что прилагая следующий текст «[объект HTMLDivElement]» , но он должен добавить значение, что «model.get („название“)» возвращается.Подчеркивание рендеринга [объект HTMLDivElement]

Вот мой шаблон:

<script type="text/template" id="todoTemplate"> 
    <div class='todoBlock'> 
    <li class='appendedTodo'> 
     <%= title %> 
    </li> 
    <button class='delete'>Delete</button><p> 
    </div> 
</script> 

Вот моя функция:

addTodoLi: function(model){ 
    var todoData = model.get('title'); 
    var compileTemplate = _.template($('#todoTemplate').html()); 
    $('#todo-list').append(compileTemplate(todoData)); 
    }, 
+0

Я сделал быстрый [скрипку] (http://jsfiddle.net/nuclearghost/z24A4/), который работает, но не делал все опорные вещи, как он выглядит. Если вы хотите разветвить скрипку дополнительными вещами, которые сломают ее, я могу помочь больше –

ответ

3

Ваш todoData будет (предположительно) строка:

var todoData = model.get('title'); 

но скомпилированный Underscore template хочет ключ/в качестве аргумента:

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

Похоже, у вас есть title глобальных переменной или window свойства, которое является <div> объектом DOM или вы получите бы, ReferenceError жалуясь неизвестной title переменного вместо строкового объектом DOM.

В любом случае, исправить довольно легко: дать шаблонную функцию, что он хочет:

$('#todo-list').append(compileTemplate({ title: todoData })); 

или общий Backbone подход:

$('#todo-list').append(compileTemplate(model.toJSON())); 

Есть случаи, когда модель будет иметь необязательные атрибуты, к которым должны обращаться шаблоны. В таких случаях, вы можете иметь:

<%= pancakes %> 

в шаблоне, но иногда toJSON даст вам:

{ title: 'x' } 

и другие времена, вы получите:

{ title: 'x', pancakes: 11 } 

В таком случае вам нужно «un-optionalize» необязательные атрибуты в вашем toJSON: toJSON должен предоставить все. Если у вас есть необязательные атрибуты, то toJSON должен убедиться, что он возвращает их с значениями undefined или null.

+0

Спасибо Му, вы ударили его по голове. Во втором, более традиционном подходе, в котором вы проходите «model.toJSON», где вы используете метод «get», чтобы получить свойство названия модели? – gh0st

+1

@ gh0st: ['toJSON'] (http://backbonejs.org/#Model-toJSON) делает' _.clone (this.attributes) ', поэтому он делает то же самое: o [a] = model.get (a) 'для каждого атрибута' a' в модели. –

0

Если с другой точкой зрения, я использую .html() или .outerHTML так:

otherview: view.render().$el.html() 
otherview: view.render().el.outerHTML 
Смежные вопросы