在Ember.js的一个把手模板中,我有以下块:
{{content.some_attribute}}
{{content.some_other_attr}}
{{content.more_attr}}
其中一些属性不存在,我正在慢慢实现它们。
有没有办法让这些模板进行编译,忽略那些没有评估或更好的块,用html元素替换它们'在浏览器中更容易发现?
(模板非常大,而且它正在缓慢地从ERB转换,
答案 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;
};