在 Ember.js 的车把模板中,我有如下块:
{{content.some_attribute}}
{{content.some_other_attr}}
{{content.more_attr}}
其中一些属性不存在,我正在慢慢实现它们。
有没有办法让这些模板编译并忽略不评估或更好的块,用 html 元素替换它们,以便更容易在浏览器中发现它们?
(模板很大,正在慢慢从ERB转换,
在 Ember.js 的车把模板中,我有如下块:
{{content.some_attribute}}
{{content.some_other_attr}}
{{content.more_attr}}
其中一些属性不存在,我正在慢慢实现它们。
有没有办法让这些模板编译并忽略不评估或更好的块,用 html 元素替换它们,以便更容易在浏览器中发现它们?
(模板很大,正在慢慢从ERB转换,
有没有办法让这些模板编译并忽略不评估的块
不存在的属性是undefined
,并且根本不会被渲染。换句话说{{thisDoesNotExist}}
,它将是不可见的——它会编译得很好。
或者更好的是,将它们替换为 html 元素,以便更容易在浏览器中发现它们
正如 Cory 所说,您可以使用undefined
Ember.Handlebars.registerBoundHelper来检查.
对于车把助手来说,这似乎是一个完美的案例。助手可以验证该值并返回您想要的值或 html。
undefined
替换模板中可能值的一种可能解决方案是覆盖Ember.getPath
,它用于在模板中查找路径的值,请参见http://jsfiddle.net/pangratz666/hKK8p/:
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;
};