如何在handlebar.js中测试未定义的Object属性

时间:2013-04-19 07:57:31

标签: backbone.js handlebars.js

我有一个模型集合,其中包含一个名为start_time的属性,以秒为单位(0-60 ..),如果没有设置start_time,则为未定义。

我有麻烦来测试此属性是0还是null / undefined,因为把手#if总是将其转换为0

3 个答案:

答案 0 :(得分:1)

如果您要提取数据,可以使用collection.parse在模型上设置一个可在视图中测试的新字段。

YourCollection = Backbone.Collection.extend({
  url: "/api/foo",
  parse: function(res) {        
    return _.map(res, function(source) {    
      obj = _.clone(source);
      obj.no_start = !obj.hasOwnProperty('start_time');
      return obj;
    });
  }
});

答案 1 :(得分:1)

为什么不使用骨干模型默认值?

YourModel = Backbone.Model.extend({
    defaults : {
        start_time = 'no start time'
    }
});

字符串应该计算为true,并且在初始化模型时,任何null或未定义的值都将设置为“no start time”。

答案 2 :(得分:0)

在调用模板之前,你可以做一些工作:make start_time一个字符串('0'为真)。

您还可以注册helper:请参阅boolean logic within a handlebars template

应该给出类似的东西:

Handlebars.registerHelper('if_all', function() {
  var args = [].slice.apply(arguments);
  var opts = args.pop();

  var fn = opts.fn;
  if(!args[0] && args[0] != 0) fn = opts.inverse;
  return fn(this);
});