2

我在使用变量时遇到了问题,而这些变量通常对理解.js 没有问题,但似乎当您将 JST 与 underscore.js 结合使用时,它似乎很困难。

var something= SD.defaultView.extend({
    el: 'page',
    template: JST['app/www/js/templates/sex.ejs'],
    data: {
        header: 'some information!!!',
        image: '/img/path.jpg'
    },
    render: function () {
        var compiled = _.template(this.template(), this.data); //I pass in the complied JST template
        this.$el.html(compiled);
    }
});

呈现的 JST 文件

this["JST"]["app/www/js/templates/sex.ejs"] = function (obj) {
    obj || (obj = {});
    var __t, __p = '', __e = _.escape;
    with (obj) {
        __p += ((__t = ( header )) == null ? '' : __t) + '<sexform>Hello There</sexform>';
    }
    return __p
};

错误

ReferenceError: header is not defined - templates.js (line 21)

...obj = {});var __t, __p = '', __e = _.escape;with (obj) {__p +=((__t = ( header )...

性.ejs

<%= header %><sexform>Hello There</sexform>

背景资料

正如预期的那样,header在阅读器时不可用,这是通过 grunt 文件发生的,每次更改我的 JST 模板。我觉得我必须以错误的方式实施 JST。

但是,对我来说,这似乎是做所有事情的正确方法。

当然,我正在尝试在 sex.ejs 中使用带下划线的变量

所有这些代码都可以在这里看到:http: //m.sexdiaries.co.uk/#wank 注意: 我可以保证这对工作来说是安全的并且不包含任何图像,尽管它确实不像 url 那样具有误导性成人材料,它是一个教育应用程序。

4

1 回答 1

6

你有这个来定义视图的模板:

template: JST['app/www/js/templates/sex.ejs'],

并且JST包含函数(这或多或少是使用 JST 风格的预编译模板的全部意义):

this["JST"]["app/www/js/templates/sex.ejs"] = function (obj) {

然后你这样做:

var compiled = _.template(this.template(), this.data);
// function call ----------------------^^

那里有两件事是错误的:

  1. 您已经调用_.template编译模板。
  2. this.template是期望被馈送的编译模板函数this.data

修复非常简单:

var compiled = this.template(this.data);
于 2013-10-17T01:26:39.083 回答