0

所以,我很难将我的对象数据放入我的下划线模板中。

JS

var details = SD.defaultView.extend({
    el: 'page',
    template: JST['app/www/js/templates/sex.ejs'],
    information: {
        header: 'some information!!!',
        image: '/img/path.jpg'
    },
    render: function () {
        var infom = _.template(this.template(), this.information);
        c(_.template(this.template()).source);
        this.$el.html(infom);
    }
});

JST 模板

<% console.info(this.information); %>
<sexform></sexform>

控制台输出

Object { header="some infromatoin!!!", image="/img/path.jpg"} global.js (line 34)
Object { header="some infromatoin!!!", image="/img/path.jpg"} global.js (line 34)

//output of c(_.template(this.template()).source);
function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<sexform></sexform>';
}
return __p;
}

现在,正如您所看到的,该对象正在通过,this但如果我尝试这样做会很有趣:

 <% c(this.information.header); %>
 <sexform></sexform>

出现以下错误:

TypeError: this.information is undefined  templates.js (line 21)
...__e = _.escape, __j = Array.prototype.join;function print() { __p += __j.call(ar...

这应该 100% 使用点符号。

4

1 回答 1

4

那是因为数据是未定义的!你没有通过this.data{data: this.data}因此模板的参数是{header: '..', image: '..'}

正确的代码是:

var wank = SD.defaultView.extend({
    el: 'page',
    template: JST['app/www/js/templates/sex.ejs'],
    data: {
        header: 'interesting!!!',
        image: '/img/path.jpg'
    },
    render: function () {
        // this line is changed
        var infom = _.template(this.template(), {data: this.data});
        this.$el.html(infom);
    }
});

编辑

template: JST['app/www/js/templates/sex.ejs']是编译模板,所以:

var infom = _.template(this.template(), {data: this.data});

是错误的,它必须是

var infom = _.template({data: this.data});
于 2013-10-15T22:57:31.350 回答