1

在 Ember.js 的车把模板中,我有如下块:

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

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

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

(模板很大,正在慢慢从ERB转换,

4

3 回答 3

1

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

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

或者更好的是,它们替换为 html 元素,以便更容易在浏览器中发现它们

正如 Cory 所说,您可以使用undefinedEmber.Handlebars.registerBoundHelper检查.

于 2012-06-22T21:20:14.533 回答
0

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

于 2012-06-22T21:16:42.750 回答
0

下面的代码应该非常小心地使用,因为它没有在应用程序中进行过测试。

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;
};
于 2012-06-22T21:56:05.110 回答