ハンドルバー テンプレート内にコントローラーの新しいインスタンスが必要です。
これが私の状況の簡単な例です。(コーヒークリプトの使用を許してください)
Emberには、モデルがあります:
App.Foo = DS.Model.extend
attr: DS.attr()
...
エンドポイントなどからロードします。そして、配列コントローラーに配置します。
App.FooArray = Ember.ArrayController.extend
###*
* Array of App.Foo
* @type {Array}
*/
content:
method: ->
...
最後に、このモデル用の「インスタンス」コントローラーを用意しました。これは、さらなるメソッドを実装します (つまり、これはルーター レベルで見られるようなシングルトン コントローラーではなく、メソッドとイベントを追加してモデルを拡張するデコレーター (またはプロキシー) です)。ハンドラー):
App.FooController = Ember.ObjectController.extend
###*
* Content
* @type {App.Foo}
*/
content: null
action: ->
...
ハンドルバーでは、次のアイテムを反復処理したいApp.FooArray
:
{{#each myFooArray}}
Hi! My attr is {{attr}}
{{/each}}
など..これは、パラメーターなどに対して見事に機能します。
ただし、アクション (または FooController に属する他のプロパティ) を使用するときに問題が発生します。
{{#each myFooArray}}
Hi! My attr is {{attr}} <a {{action 'action'}}>Action me!</a>
{{/each}}
突然、私の行動がうまくいきません。これは、アクション ヘルパーがアクションを 'this' に適用するのではなく、より上位のコントローラーに適用するためです。
これを回避するには、ターゲット (コントローラーなど) を渡す必要があります。
{{action 'action' target=**********}}
さて、私が欲しいコントローラーは のインスタンスですApp.FooController
。今まで、私はモデル内でコントローラをインスタンス化してきました (ヤバイ!):
App.Foo = DS.Model.extend
attr: DS.attr()
...
attrn: DS.attr()
myController: Ember.computed (->
App.FooController.create
content: this
)
したがって、次のように繰り返します。
{{#each myFooArray}}
Hi! My attr is {{attr}} <a {{action 'action' target=myController}}>Action me!</a>
{{/each}}
これが悪いことだとはわかっていますが、これ以上の方法は思いつきません。誰か、私が光を見るのを手伝ってください!