Как передать дополнительные переменные в шаблоны подчеркивания

StackOverflow https://stackoverflow.com/questions/8809817

Вопрос

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

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()));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top