1

Ember.js のハンドルバー テンプレートには、次のようなブロックがあります。

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

これらの属性のいくつかは存在せず、ゆっくりと実装しています。

これらのテンプレートをコンパイルして、評価されないブロックを無視するか、ブラウザで簡単に見つけられるように HTML 要素に置き換える方法はありますか?

(テンプレートはかなり大きく、ERB からゆっくりと変換されています。

4

3 に答える 3

1

これらのテンプレートをコンパイルして、評価されないブロックを無視する方法はありますか

存在しないプロパティはundefinedであり、まったくレンダリングされません。言い換えれば{{thisDoesNotExist}}、単に見えなくなります - それは問題なくコンパイルされます。

または、ブラウザーで簡単に見つけられるように、それらを html 要素に置き換えます。

Cory が言ったように、Ember.Handlebars.registerBoundHelperundefinedを使用して、これをチェックするヘルパーを使用できます。

于 2012-06-22T21:20:14.533 に答える
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 に答える
0

これは、ハンドルバーのヘルパーにとって完璧なケースのようです。ヘルパーは値を検証し、必要な値または html を返すことができます。

于 2012-06-22T21:16:42.750 に答える