javascript - 如何在 Underscore 模板中使用自定义函数?

标签 javascript underscore.js underscore.js-templating

我有一个帮助程序 JavaScript 文件,但我无法在模板中使用它:它会抛出一个错误,指出 helper 未定义。

示例代码:

<img alt="" src="<%= helper.isURL(images[i].small) ? images[i].small : '/img/' + images[i].small %>">

我尝试使用 isURL 嵌入一些原始 JavaScript block ,但仍然遇到相同的错误。

<script>function isURL() {}</script>

最佳答案

下划线模板可以使用纯JS。您可以在编译模板函数使用的上下文对象中公开任何您想要的内容。

在下面的示例中,我创建了一个简化的 Helper 对象,该对象被传递给扩展 data 对象中的已编译模板函数。

var data = { test: "value" },

    // simplified mock of the helpers
    Helper = { isUrl: function(){ return true; } },
    
    // compiled template function
    template = _.template('result: <%= Helper.isUrl(data.test) ? data.test : "default" %>'),
    
    // the same data, now including the Helper
    extendedData = _.extend({ Helper: Helper }, data),
    
    // rendered template as a string
    rendered = template(extendedData);

console.log(rendered);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

默认情况下,任何公共(public)内容也是可用的。

在这里,我使用公共(public)变量和join数组的原型(prototype)函数。

window.test = "public data";

var data = { arr: ['test', 'test2'] },
    template = _.template('arr: <%= arr.join(", ") %>\ntest: <%= test %>');

console.log(template(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

关于javascript - 如何在 Underscore 模板中使用自定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42637475/

相关文章:

javascript - 如何从对象中的特定参数从我的对象中找到唯一的对象

javascript - 我的主干下划线模板引用错误?

javascript - 如何从 Backbone 集合中获取数据到模板

javascript - 将实数值绑定(bind)到 Grails 域属性(Dojo 小部件发送的值)

javascript - 设置测验模块的时间限制

Javascript 按钮单击 + 显示

javascript - 如何从 jquery 中的选择器字符串正确创建变量

javascript - 检索具有特定值的对象数组中的所有键

backbone.js - 异步请求后未调用主干集合 : _.

javascript - 从 underscore.js 的模板中删除 html 元素