【问题标题】:Underscore template Uncaught ReferenceError variable is not defined [duplicate]下划线模板未捕获的 ReferenceError 变量未定义 [重复]
【发布时间】:2014-09-26 18:27:27
【问题描述】:

我正在尝试使用下划线模板渲染基本主干视图,但在尝试渲染模板时不断收到以下错误。

Uncaught ReferenceError: amount is not defined

这是 jsfiddle:http://jsfiddle.net/rkj6j36n/

HTML

<body>
    <div class="msg-con"></div>
</body>

JS

DumbViewObj = Backbone.View.extend({
    el: $('.msg-con'),
    initialize:function(){
        this.render();
    },
    render: function(){
        var template = _.template('I am <%= amount %> dumb',{amount:'200'});
        this.$el.append(template);
    },
});
var dumb = new DumbViewObj();

我确定解决方案非常简单,但我想不通

【问题讨论】:

标签: javascript backbone.js underscore.js underscore.js-templating


【解决方案1】:

因为 template 是一个函数,而 template( obj ) 返回的是你要查找的字符串,所以它不会在你调用它之后返回字符串。

你的代码在做什么

var xxx = template();
this.$el.append(xxx);

你应该做什么

render: function(){
    var template = _.template($('#dumb').html());
    var vars = {amount:200};
    var html = template(vars);
    this.$el.append(html);
},

【讨论】:

    【解决方案2】:

    一行:

    this.$el.append(_.template('I am <%= amount %> dumb')({amount:200}))
    

    【讨论】:

    • 这似乎是旧下划线版本的过时解决方案
    【解决方案3】:

    _.template 将模板编译成一个函数。您必须将参数传递给要评估的结果函数:

        var template = _.template('I am <%= amount %> dumb');
        this.$el.append(template({amount:'200'}));
    

    【讨论】:

    • @aktiv-coder 抱歉,我没有足够的声誉点数给 cmets。您的 sn-p 正在工作,因为您使用的是旧版本的下划线。尝试改用 1.7。
    猜你喜欢
    • 2012-09-07
    • 2012-03-03
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2016-08-10
    • 2023-03-04
    相关资源
    最近更新 更多