Как передать дополнительные переменные в шаблоны подчеркивания - PullRequest
3 голосов
/ 11 января 2012

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

print(someKey.replace(searchTerm, '<b>' + searchTerm + '</b>')

Он работает так, как это требуется, но я должен установить переменную searchTerm в глобальном пространстве имен наполучить эту работу.Интересно, есть ли способ получить доступ к моей модели представлений в методе печати, чтобы я мог написать это так:

print(someKey.replace(searchTerm, '<b>' + this.model.get('searchTerm') + '</b>')

Или если бы я мог установить searchTerm как локальную переменную в моей функции рендеринга и получить доступэто в моем шаблоне.

Вот весь вид Backbone:

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();
    }
});

1 Ответ

8 голосов
/ 11 января 2012

Я не уверен, что полностью понимаю ваш вопрос. Но я делаю что-то в этом духе, чтобы передать несколько объектов в функцию шаблона.

 $(this.el).html(_.template(html)($.extend({}, this.model.toJSON(), App.lists.toJSON())))

Функция расширения jquery позволяет объединять два объекта в один. Так что в вашем случае вы можете объединить ваш "searchTerm" с вашей моделью во время шаблонизации.

_.template(html)($.extend({}, row.doc, {"searchTerm": searchTerm}))

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

EDIT:

Вот ссылка на jquery extension

И подчеркивание также имеет и метод расширения , если вы не используете 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()));
}
...