我有这段代码:
_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g};
var _d = _.template($('#_d').html());
$.get('/foo', function(data) {
$('#output').html(_d(data));
});
并在HTML中:
<div id="_d">
{{name}} {{phone}}
</div>
<div id="output"></div>
/foo
返回类似{"name":"joe","phone":"12345"}
的内容,但有时它没有phone
,因此只返回{"name":"joe"}
,这将阻止模板评估,因此output
不会打印任何内容1}}。如何使变量可选?
编辑: /foo
无法控制
答案 0 :(得分:7)
||
运算符对于此类事情非常有用:
$.get('/foo', function(data) {
data.phone = data.phone || "";
$('#output').html(_d(data));
});
但由于您已经在使用下划线,因此您可以使用_.defaults
功能。此方法对于为多个字段提供默认值特别有用:
$.get('/foo', function(data) {
_.defaults(data, {name : 'joe', phone : ''});
$('#output').html(_d(data));
});
答案 1 :(得分:5)
我喜欢@namuol解决方案,我们可以做的另一件事是在模型扩展中设置默认值哈希
var MyModel = Backbone.Model.extend({
defaults: {
"foo": "I",
"bar": "love",
"yeah": "sara"
}
});
只是另一种选择。
答案 2 :(得分:3)
你可以有一个HTML
<div id="d">
{{data.name}} {{data.phone}}
</div>
使用下面的模板来避免phone
_.templateSettings = {
interpolate : /\{\{(.+?)\}\}/g
};
var template = _.template($('#d').html());
var jsonResponse = {"name":"Jeo"}; // phone is missing
var result = template({"data":jsonResponse});
答案 3 :(得分:1)
一个实际的解决方案是在对象中包含phone
,但值为空值:
{"name":"joe","phone":""}
答案 4 :(得分:1)
上面有一些很好的答案,但您可以使用_.partial
来获取应用默认模板的单个函数:
foobarTemplate = _.template('<%=foo%><%=bar%>')
barPrefilled = _.partial(_.defaults, _, {bar:'def'})
foobarTemplate(barPrefilled({foo:'abc'}))
// "abcdef"
foobarTemplateWithDefaults = function (data) {return foobarTemplate(barPrefilled(data));}
foobarTemplateWithDefaults({foo:'wat'})
// "watdef"
foobarTemplateWithDefaults({foo:'foo', bar:'bar'})
// "foobar"
答案 5 :(得分:1)
然后显而易见:将它放在模板的顶部:
<%
if (typeof(phone) === "undefined") {
phone = "";
}
%>
工作片段:
$(function() {
$('#result').html(
_.template(
$('#template').html(), {
interpolate: /\{\{(.+?)\}\}/g
}
)({
foo: 23,
// No value for bar
// bar: 11,
},)
)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="x-template" id="template">
<%
if (typeof(bar) === "undefined") {
bar = "default";
}
%>
This is {{ foo }} and {{ bar }}
</script>
<div id="result"></div>
(也作为jsfiddle)