为什么带有itemcontroller的Array控制器有不同的'this'对象?

时间:2015-05-27 04:35:46

标签: ember.js

我将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时,控制台的输出打印出这个值:

enter image description here

但是当我从另一个控制器发送动作时:

this.get('controllers.chatboxes').send('react');

'this'的输出值是:

enter image description here

显然,两个'这个'是完全不同的对象,为什么?

当我从其他控制器发送动作时,如何使用子控制器对象访问第一个'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');
        }
    })

1 个答案:

答案 0 :(得分:2)

首先,ArrayControllersObjectControllersitemController都已被弃用,因此我不会花费大量时间来解决这个问题。

我看到现在发生了什么,当你使用render时,它会创建一个新实例。 needs抓取控制器的单例实例(与渲染不同)。

我建议使用组件并传入完成您要执行的操作所必需的属性。 http://guides.emberjs.com/v1.11.0/components/defining-a-component/