动态骨干模板变量

时间:2013-04-11 15:40:36

标签: javascript backbone.js underscore.js

// Template Helper
window.template = function (id) {
return _.template($('#' + id).html());
};

// Template Helper in view.render
this.$el.html( this.template(this.model.toJSON()) );

// This Template Call in View
template: template('response-form')

// This My If Else Construction in View Initialize
if (this.model.attributes.status === true) {
  here i want set template id to response-auth
} else {
  here i want set template id to response-form
}

我不知道,我怎样才能动态改变模板调用的价值?有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可以随时在视图中更改this.template。因此,您可以查看视图initialize中的状态:

initialize: function() {
    if(this.model.get('status'))
        this.template = template('response-auth');
    else
        this.template = template('response-form');
}

或者您可以在render内做出决定:

render: function() {
    var tmpl = null;
    if(this.model.get('status'))
        tmpl = template('response-auth');
    else
        tmpl = template('response-form');

    // your current rendering code goes here but uses
    // tmpl instead of this.template
}

您采取的方法取决于您是否期望状态发生变化。

当然,您可以在构建视图时编译它们:

template_auth: template('response-auth'),
template_form: template('response-form'),
initialize: function() {
    // Set this.template to this.template_auth or this.template_form...
},
render: function() {
    // Or pick this.template_auth or this.template_form in here if
    // that makes sense...
}

如果您希望使用这两个模板,那么编译它们都是有意义的,否则我会做出决定,直到需要进行(可能在render)。

答案 1 :(得分:0)

@mu太短:我们无法通过任何方式传递内部动态数据

  

template('response-auth');

假设我有超过50个模板,那么if else语句就不能放置。

$(`#channel-view-${targetPlatformId}`).html(_.template(templates.manage_store_form_template_Ebay)({


$(`#channel-view-${targetPlatformId}`).html(_.template(templates.manage_store_form_template_shopify)({

上面一行有一个区别,那就是频道名称,我可以通过什么方式在 _。template()

内部传递动态数据