忽略或替换不编译的Handlebars块

时间:2012-06-22 18:56:58

标签: ember.js javascript-framework handlebars.js

在Ember.js的一个把手模板中,我有以下块:

{{content.some_attribute}}
{{content.some_other_attr}}
{{content.more_attr}}

其中一些属性不存在,我正在慢慢实现它们。

有没有办法让这些模板进行编译,忽略那些没有评估或更好的块,用html元素替换它们'在浏览器中更容易发现?

(模板非常大,而且它正在缓慢地从ERB转换,

3 个答案:

答案 0 :(得分:1)

  

有没有办法让这些模板编译,并忽略不评估的块

不存在的属性是undefined,并且根本不会渲染。换句话说,{{thisDoesNotExist}}只是不可见 - 它会编译得很好。

  

或者更好的是,用html元素替换它们,这样它们就更容易在浏览器中找到

正如Cory所说,您可以使用帮助程序,使用Ember.Handlebars.registerBoundHelper检查undefined

答案 1 :(得分:0)

对于车把助手来说,这似乎是一个完美的案例。帮助程序可以验证该值并返回您想要的值或html。

答案 2 :(得分:0)

应非常小心地使用以下代码,因为它尚未在应用程序中进行测试。

替换模板中可能的undefined值的可能解决方案是覆盖Ember.getPath,用于查找模板中路径的值,请参阅http://jsfiddle.net/pangratz666/hKK8p/:< / p>

var getPath = Ember.getPath;
Ember.getPath = function(obj, path) {
    var value = getPath(obj, path);
    return (Ember.none(value) ? 'OMG %@ is not defined!!'.fmt(path) : value);
};

如果此代码在应用程序中使用暂时,我还会将undefined值的检查限制为特定的obj。所以有这样的话:

App.objectWhichHasUndefinedProps = Ember.Object.create({
    ...
});

Ember.View.create({
    templateName: 'templateWithAttributes',
    objBinding: 'App.objectWhichHasUndefinedProps'
}).append();

var getPath = Ember.getPath;
Ember.getPath = function(obj, path) {
    var value = getPath(obj, path);
    if (obj === App.objectWhichHasUndefinedProps) {
        return (Ember.none(value) ? 'OMG %@ is not defined!!'.fmt(path) : value);
    }
    return value;
};