我在将模型数据从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
传递给模板,但我不确定。有什么我想念的吗?
答案 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
部分。