0

我在将模型数据从主干视图传递到下划线中的模板时遇到问题。我想将一个数组传递到模板中,以便我可以使用_.each. 我的代码如下:

模板设置

_.templateSettings = {
    interpolate: /\{\{(.+?)\}\}/g,
    evaluate: /\{\{([\s\S]+?)\}\}/g
};

插值 is {{ }} 和评估 is {[ ]}。除非我的正则表达式不正确

看法

el: $('#assasinationBackbone'),
events: {
    'click #newHitJob': 'addNewHitJob'
},
initialize: function() {
},

addNewHitJob: function() {
    var hitMen = new HitManList();
    var template = _.template($('#newHitJobTemplate').html());
    hitMen.fetch({
        success: function() {
            $('#newHitJobForm').html(template(hitMen.toJSON()));
            return hitMen; //CANNOT REMEMBER WHY I PUT THIS HERE (NO SIDE EFFECTS)
        }
    });
});

我没有在视图中将模板定义为template: ,而是在addNewHitJob属性中定义了它。 1. 这是正确的吗?我这样做是因为我将拥有多个模板。上述模板如下

模板(在 Jade 中),如果需要,我可以翻译成 html

.span4#newHitJobForm
    script#newHitJobTemplate(type="text/template")
        select#names                
        {[ _.each(hitman, function(name) { ]}
        option(value="{{ name._id }}") {{ name.name }}
        {[ }); ]}

2.据我所见,我的问题是传递hitman给模板,但我不确定。有什么我想念的吗?

4

1 回答 1

0

您的evaluate正则表达式不正确,您想要:

evaluate: /\{\[(.+?)\]\}/g

你的evaluate正则表达式相当于你的interpolate因为[\S\s]应该匹配任何东西.

当你调用一个下划线模板时,你需要给它一个包含模板名称和值的对象,只是给它一个数组(hitMen.toJSON())不会做任何有用的事情;您需要给您的序列化hitMen一个名称,以便模板可以引用它们:

$('#newHitJobForm').html(template({ hitMen: hitMen.toJSON() }));

然后在模板中:

{[ _.each(hitMen, function(hitMan) { ]}
option(value="{{ hitMan.cat._id }}") {{ hitMan.name }}
{[ }); ]}

我不得不猜测这hitMan.cat._id部分。

于 2012-12-17T02:23:57.740 回答