2012-02-13 3 views
2

Ember.jsとHandlebarsに慣れようとしていますが、1つの問題が私を困惑させています。私はたぶん何かを見逃しているかもしれませんが、しばらくの間そこにいて何か間違ったことは見つけられませんでした。Ember.jsヘルパーがパラメータを正しく認識しない

私は怒鳴る単純なテンプレートがあります。

<header> 

    <h2><a href="#" class="link-box-title">{{project.pid}}-{{projectWindowTitle project}}</a></h2> 

</header> 

最初の{{project.pid}}が正しくproject.pid値を出力し、私はヘルパー関数怒鳴るにプロジェクトオブジェクトを渡したい:

Handlebars.registerHelper('projectWindowTitle', function(proj) { 

    var info = proj.pid; 
    return info; 

}); 

私は過度にヘルパーを簡素化するんだけど、結果は常に同じで、ヘルパーは何も返さdoes't:

<a href="#" class="link-box-title"><script id="metamorph-9-start" type="text/x-placeholder"></script>S2S<script id="metamorph-9-end" type="text/x-placeholder"></script>-</a> 

私は間違って何をしていますか?

答えて

5

ハンドルバーをember.jsで使用すると、ヘルパー署名が「プレーン」のハンドルバーと少し異なります。主な違いは、ヘルパーが呼び出される前に引数が "解決"されていないことです。あなたはビューから「プロジェクト」の値を取得する必要がありますので

ご例えば、projのは、「プロジェクト」である:

Handlebars.registerHelper('projectWindowTitle', function(property, options) { 
    var project = Ember.getPath(this, property); 
    var info = project.get("pid"); 
    return info; 
}); 
+1

マイケルの権利。私はこれがプロジェクトの割り当てを 'var project = Ember.get(this、property);'に変更すると動作すると思います。 –

+0

私のタイプミスを指摘してくれてありがとうDan、私はそれを修正しました! –

+0

ありがとう、完璧に働いた! –

1

私はその質問にはすでに答えを受け入れている知っているが...それはです正しいアプローチではありません。

エバーのハンドルバーヘルパーを作成する適切な方法は、ハンドルバーの場合と少し異なります。に記載されています。線に沿って

何か:パラメータは名前として渡されているので、あなたが、ヘルパーの中から `project`オブジェクトを解決する必要があるという点で、

Ember.Handlebars.helper('projectWindowTitle', function(value) { 
    var escaped = Handlebars.Utils.escapeExpression(value.pid); 
    return new Handlebars.SafeString(escaped); 
}); 
関連する問題