2013-01-11 5 views
7

私は、emberのregisterBoundHelperがブロックスタイルのヘルパーを扱えるようになったのかと疑問に思っています。例えば、私は次のように作成しました:Emberのブロックされたブロックヘルパー

Ember.Handlebars.registerBoundHelper('unlessUndefined', (context, options) -> 
    unless typeof context == "undefined" 
    return options.fn(this) 
    else 
    return options.inverse(this) 
) 

アイデアのようなそれを使用すること:

{{#unlessUndefined choice}} 
    {{#if choice}} 
    <p>You chose yes</p> 
    {{else}} 
    <p>You chose no</p> 
    {{/if}} 
{{else}} 
    <p>Make a choice</p> 
{{/unlessUndefined}} 

option.fn(この)物事の部分は任意の出力をレンダリングするためには表示されません。これを行うと、コンソールに「レンダリングプロセスの外でappendChildを使用することはできません」エラーが表示されます。

これが可能でない場合は、おそらく誰かが別の方法で条件ブロックをバインドされた値が未定義でない場合のみ表示されますか?

答えて

4

私はちょうどこれを戦い、一種の修正を見つけた。私はregisterBoundHelperメソッドの実装でプルリクエストを調べました。

私は、この行の上に次を追加しました: https://github.com/emberjs/ember.js/pull/1274/files#L0R357

Ember.run.scheduleOnce('render', view, 'rerender') 

それはboundHelper方法は、単にオリジナルのヘルパーメソッドをラップのように見え、匿名のビューを作成します。唯一の問題は、オブザーバが元のビューを同じ最初に置かずに、匿名ビューをレンダリングモードにすることです。

少なくとも私はこれが起こっていると思います。とにかく、それは今私のために働く。これはバグでしょうか?

+1

こんにちはPaul。この情報を投稿していただきありがとうございます。私は現時点でEmberのマスターバージョンを実行しているので、あなたのソリューションを実践することができませんでした。しかし、再レンダリングされていない元のビューについてはあなたが正しいと思います。 変更を加えれば、関数内でレンダリングを行うときに言及した行を追加するのと同じくらい簡単ではなく、その関数のコンテキストは元のビューにアクセスできません。 動作を絞り込むことができたら、これでバグを開く価値があります。 –

+0

はまだ問題がありますか? –

+0

が見つかりませんでした。開いているもの:https://github.com/emberjs/ember.js/issues/2237 –

関連する問題