我将arraycontroller定义为:
Kiford.ChatboxesController = Ember.ArrayController.extend({
itemController: 'chatbox',
currentParticipant: undefined,
actions:{
react: function(){
console.log(this);
},
}
我有一个使用此控制器的模板:
{{#each item in controller}}
<div {{action 'react'}}>test react</div>
{{/each}}
当我点击带有'test react'文本的div时,控制台的输出打印出这个值:
但是当我从另一个控制器发送动作时:
this.get('controllers.chatboxes').send('react');
'this'的输出值是:
显然,两个'这个'是完全不同的对象,为什么?
当我从其他控制器发送动作时,如何使用子控制器对象访问第一个'this'对象?
已修改:附加代码:
main.hbs:
<div class="out-box">
{{render "chatboxes" model}}
<div class="clear"></div>
</div>
路线主要:
App.Router.map(function() {
this.resource('main', {path: '/' }, function(){}}
chatboxes.hbs:
{{#each item in controller}}
........
{{/each}}
主控制器:
APP.MainController = Ember.ObjectController.extend({
needs: ['chatboxes'],
meetingCallback: function(operation){
switch(operation.type){
case 'sendMessage':
this.get('controllers.chatboxes').send('react');
}
})
答案 0 :(得分:2)
首先,ArrayControllers
,ObjectControllers
,itemController
都已被弃用,因此我不会花费大量时间来解决这个问题。
我看到现在发生了什么,当你使用render
时,它会创建一个新实例。 needs
抓取控制器的单例实例(与渲染不同)。
我建议使用组件并传入完成您要执行的操作所必需的属性。 http://guides.emberjs.com/v1.11.0/components/defining-a-component/