Question

J'ai une vue épine dorsale qui rend un résultat de recherche dans un modèle de trait de soulignement. Comme je tiens à souligner le terme de recherche dans le résultat que j'ai la méthode d'impression suivante dans le modèle:

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

Il fonctionne comme aspecté, mais je dois régler la variable searchTerm dans l'espace de noms global pour obtenir ce travail. Je me demande s'il y a un moyen d'accéder à mon modèle de vue dans la méthode d'impression, pour que je puisse l'écrire comme ceci:

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

Ou si je pouvais mettre searchTerm comme une variable locale dans ma fonction et rendre l'accès dans mon modèle.

Voici l'ensemble vue 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();
    }
});
Était-ce utile?

La solution

Je ne suis pas sûr que je comprends parfaitement votre question. Mais je fais quelque chose le long de ces lignes pour passer plusieurs objets dans ma fonction de modèle.

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

La fonction jquery extension me permet de fusionner deux objets en un seul. Donc, dans votre cas, vous pouvez fusionner votre « searchTerm » avec votre modèle pendant Templating.

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

Votre autre option serait de passer l'intégralité du modèle en vous modèle fonction et effectuer votre itération de soulignement dans le modèle. Faites-moi savoir si vous avez besoin d'explications sur ce point.

EDIT:

Voici un lien vers jquery extension

Et underscore a aussi et méthode extend si vous ne l'utilisez jquery

EDIT EDIT:

Ceci est juste pour vous donner un exemple de ma deuxième suggestion. Aurait probablement besoin de quelques ajustements à jeter dans le vôtre, mais c'est l'idée.

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()));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top