我一直遇到一个棘手的情况:在车把模板中需要一个新的控制器实例。
这是我的情况的一个简短示例。(请原谅我使用咖啡脚本)
在 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}}
我知道这很糟糕,但我想不出更好的方法。有人,请帮助我看到光明!