I've a backbone view that renders a search result in a underscore template. As I want to highlight the search term in the result I have the following print method in the template:
print(someKey.replace(searchTerm, '<b>' + searchTerm + '</b>')
It works as aspected, but I have to set the searchTerm
variable in the global namespace to get this work. I wonder if there is a way to access my views model in the print method, so I could write it like this:
print(someKey.replace(searchTerm, '<b>' + this.model.get('searchTerm') + '</b>')
Or if I could set searchTerm as a local variable in my render function and access it in my template.
Here is the whole Backbone view:
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();
}
});