Как передать дополнительные переменные в шаблоны подчеркивания
-
26-10-2019 - |
Вопрос
У меня основное представление, которое отдает результат поиска в нижнем шаблоне. Как я хочу выделить термин поиска в результате, у меня есть следующий метод печати в шаблоне:
print(someKey.replace(searchTerm, '<b>' + searchTerm + '</b>')
Это работает так же, как аспект, но я должен установить searchTerm
переменная в глобальном пространстве имен, чтобы получить эту работу. Интересно, есть ли способ получить доступ к моей модели представления в методе печати, так что я мог бы написать это так:
print(someKey.replace(searchTerm, '<b>' + this.model.get('searchTerm') + '</b>')
Или, если бы я мог установить поиск в качестве локальной переменной в моей функции рендеринга и получить доступ к нему в моем шаблоне.
Вот целый магистральный вид:
var searchTerm;
var SearchResultView = Backbone.View.extend({
initialize: function() {
this.model.bind('change:rows', this.render, this);
this.model.bind('change:searchTerm', this.clear, this)
},
template: _.template("<tr><td><% print(someKey.replace(searchTerm, '<b>' + searchTerm + '</b>')); %></td></tr>", this),
render: function() {
searchTerm = this.model.get('searchTerm')
_.each(this.model.get('rows'), function(row) {
this.el.append($(this.template(row.doc)));
}, this)
},
clear: function(){
this.el.empty();
}
});
Решение
Я не уверен, что полностью понимаю ваш вопрос. Но я делаю что -то в этом направлении, чтобы пропустить несколько объектов в мою функцию шаблона.
$(this.el).html(_.template(html)($.extend({}, this.model.toJSON(), App.lists.toJSON())))
Функция jQuery Extend позволяет мне объединить два объекта в один. Таким образом, в вашем случае вы можете объединить свою «поисковую перспективу» с вашей моделью во время шаблона.
_.template(html)($.extend({}, row.doc, {"searchTerm": searchTerm}))
Другой вариант - передать всю вашу модель в функцию шаблона и выполнить свою подчеркивающую итерацию в шаблоне. Дайте мне знать, если вам нужно больше объяснения этого.
РЕДАКТИРОВАТЬ:
Вот ссылка на jQuery расширяется
И подчеркивается также есть и расширить метод Если вы не используете jQuery
Редактировать редактирование:
Это просто для того, чтобы дать вам пример моего второго предложения. Вероятно, понадобится немного настройки, чтобы бросить в вашу, но это идея.
template: _.template("
<% _(rows).each(function(row) { %>
<tr><td><% print(someKey.replace(searchTerm, '<b>' + searchTerm + '</b>')); %></td></tr>
<% } %>
"),
render: function(){
this.el.append(this.template(this.model.toJSON()));
}