下划线模板的有趣行为

时间:2015-05-12 15:05:16

标签: javascript backbone.js underscore.js

我尝试立即将数据传递给模板调用:  var compiled = _.template('template code there', {params: 123})

关于规范变量'编译'必须准备好用作HTML标记。

但是!我有一个功能..

这对我来说真的很奇怪..我在plnkr.co上运行了这段代码,它给出了期待的结果,但是在本地它并没有按预期工作。

P.S。在我的例子中,我使用bower下载脚本

<script src="../scripts/vendor/jquery/dist/jquery.js"></script>
<script src="../scripts/vendor/underscore/underscore.js"></script>
<script src="../scripts/vendor/backbone/backbone.js"></script>

...

var list = "<%= ... %>";
    var compiled = _.template(list, {data : ['one', 'two']});
alert(compiled); // got function !

有人可以解释一下吗?

P.S。工作示例 - http://jsfiddle.net/xm6ymxoj/ 并且我无法在我的机器上本地重现这个简单的代码,因此我收到一个函数(处于警报状态)。

2 个答案:

答案 0 :(得分:2)

_.template(templateString, [settings])(请参阅docs)将字符串编译为模板。这个模板是一个函数,然后可以使用一些给定的数据呈现给HTML。

来自文档:

var compiled = _.template("hello: <%= name %>");
compiled({name: 'moe'});
=> "hello: moe"

编辑:因此,在您的示例中,您应该使用:

var list = "<%= ... %>";
var compiled = _.template(list);
var html = compiled({data: ['one', 'two']})

答案 1 :(得分:0)

网络中的许多代码示例都是这样的:

 var c_markup = _.template("Hello <%=user%>!", { user: "MyName" });

但据我所知,这段代码已经过时,现在还没有用。

我们需要将参数传递给准备好的函数调用:

var c_markup = _.template("Hello <%=user%>!");
c_markup({ user: "MyName" });

这一刻让我很困惑。希望这可以帮助某人。