骨干&下划线:无法将模型传递给模板进行评估

时间:2012-12-17 02:10:38

标签: backbone.js underscore.js

我在将模型数据从Backbone View传递到Underscore中的模板时遇到了麻烦。我想将一个数组传递给模板,以便我可以使用_.each进行评估。 我的代码如下:

templateSettings

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

插值为{{ }} ,评价为{[ ]}。除非我的正则表达式不正确

查看

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传递给模板,但我不确定。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

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

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

您的evaluate正则表达式与您的interpolate相同,因为[\S\s]应匹配.之类的任何内容。

当你调用一个Underscore模板时,你需要给它一个带有模板名称和值的对象,只需将它交给一个数组(hitMen.toJSON())就不会有用了;您需要为序列化hitMen提供一个名称,以便模板可以引用它们:

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

然后在模板中:

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

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