Pregunta

Tengo una visión de la columna vertebral que representa un resultado de búsqueda en una plantilla de subrayamiento. Como quiero resaltar el término de búsqueda en el resultado, tengo el siguiente método de impresión en la plantilla:

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

Funciona como aspectado, pero tengo que establecer el searchTerm variable en el espacio de nombres global para obtener este trabajo. Me pregunto si hay una manera de acceder a mi modelo de vistas en el método de impresión, por lo que podría escribirlo así:

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

O si pudiera establecer Searchter como una variable local en mi función de renderizado y acceder a ella en mi plantilla.

Aquí está toda la vista de la columna vertebral:

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();
    }
});
¿Fue útil?

Solución

No estoy seguro de entender completamente tu pregunta. Pero hago algo en este sentido para pasar múltiples objetos a mi función de plantilla.

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

La función JQuery Extend me permite fusionar dos objetos en uno. Entonces, en su caso, podría fusionar su "Termet de búsqueda" con su modelo durante la plantación.

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

Su otra opción sería pasar todo su modelo a su función de plantilla y realizar su iteración subrayada en la plantilla. Avíseme si necesita más explicación al respecto.

EDITAR:

Aquí hay un enlace a jQuery extender

Y el bajo también tiene y extender el método Si no estás usando jQuery

Editar editar:

Esto es solo para darle un ejemplo de mi segunda sugerencia. Probablemente necesitaría algunos ajustes para tirar el tuyo, pero esta es la idea.

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()));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top