我不喜欢玉我花时间搞清楚如何使用HTML而不是我想出来的。
首先安装ejs,然后为HTML实现以下代码。
app.engine('html', require('ejs').renderFile);
app.get('/', function(req, res) {
res.render(__dirname + '/views/page.html', {
string: 'random_value',
other: 'value'
});
});
一切顺利,直到我需要从服务器提取集合并在page.html上呈现一些下划线语法
类似
<script type="text/template" id="messages">
<%= message %>
</script>
我遇到了一个stackoverflow帖子,提到除了使用模板引擎之外还需要一些东西,但是我没有太注意它而且无法找到那条信息。
编辑:我更改了一些代码,但仍无效。 name is not defined at eval
“name”是我试图从我的模型中获取的属性。
在我的backbone.js代码中,我有这样的代码。
window.App.Views.Message = Backbone.View.extend({
template: _.template($('#messages').html()),
render: function() {
console.log(this.model.toJSON());
this.$el.append(this.template(this.model.toJSON()));
return this;
}
});
然后在我的服务器代码中,我有这个。
var engines = require('consolidate');
app.engine('html', engines.underscore);
app.get('/', function(req, res) {
res.render(__dirname + '/views/page.html', {
string: 'random_value',
other: 'value'
});
});
在page.html里面我有
<script type="text/template" id="messages">
<% name %>
</script>
运行节点服务器我得到name is not defined at eval
编辑:现在尝试使用mustache.js,让我们看看这是怎么回事。
答案 0 :(得分:0)
好的,我用它来使用underscore.js这就是我所做的。
在我的backbone.js代码中,我修改了如何获得下划线模板而不是
template: _.template($('#messages').html()),
我用它作为变量
var tpl = _.template($('#messages').html(), {data: data});
当然将我的数据传递给它var data = this.model.toJSON();
window.App.Views.Message = Backbone.View.extend({
render: function() {
var data = this.model.toJSON();
var tpl = _.template($('#messages').html(), {data: data});
this.$el.append(tpl);
return this;
}
});
然后在我的HTML中
<script type="text/template" id="messages">
<%= data.name %>
</script>