在快递应用程序中使用underscorejs?

时间:2014-03-09 06:52:16

标签: javascript express underscore.js-templating

我不喜欢玉我花时间搞清楚如何使用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,让我们看看这是怎么回事。

1 个答案:

答案 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>