如何将附加变量传递到下划线模板

2023-12-06

我有一个主干视图,它在下划线模板中呈现搜索结果。由于我想在结果中突出显示搜索词,因此我在模板中使用了以下打印方法:

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

我不确定我是否完全理解你的问题。但我按照这些思路做了一些事情,将多个对象传递到我的模板函数中。

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

jquery 扩展函数让我可以将两个对象合并为一个。因此,在您的情况下,您可以在模板化过程中将“searchTerm”合并到您的模型中。

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

您的另一个选择是将整个模型传递到模板函数中并在模板中执行下划线迭代。如果您需要更多解释,请告诉我。

EDIT:

这是一个链接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()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将附加变量传递到下划线模板 的相关文章

随机推荐