在underscore.js模板中使变量可选

wir*_*uma 8 javascript templates underscore.js

我有这个代码:

_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g};

var _d = _.template($('#_d').html());

$.get('/foo', function(data) {
    $('#output').html(_d(data));
});
Run Code Online (Sandbox Code Playgroud)

并在HTML中:

<div id="_d">
    {{name}} {{phone}}
</div>
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)

/foo返回类似的东西{"name":"joe","phone":"12345"},但有时它没有phone简单的返回{"name":"joe"},这将阻止模板评估,因此没有任何内容被打印出来output.如何使变量可选?

编辑: /foo我无法控制

nam*_*uol 7

||操作是这样的事情有用:

$.get('/foo', function(data) {
    data.phone = data.phone || "";
    $('#output').html(_d(data));
});
Run Code Online (Sandbox Code Playgroud)

但由于您已经在使用Underscore,因此您可以使用该_.defaults功能.此方法对于为多个字段提供默认值特别有用:

$.get('/foo', function(data) {
    _.defaults(data, {name : 'joe', phone : ''});
    $('#output').html(_d(data));
});
Run Code Online (Sandbox Code Playgroud)


Rob*_*con 5

我喜欢@namuol解决方案,我们可以做的另一件事是在模型扩展中设置默认值哈希

var MyModel = Backbone.Model.extend({
    defaults: {
        "foo": "I",
        "bar": "love",
        "yeah": "sara"
    }
});
Run Code Online (Sandbox Code Playgroud)

只是另一种选择.