来自路由的 Emberjs 模型在控制器中返回未定义

Emberjs Model from route returning undefined in controller

我的 Ember 应用程序有一个奇怪的行为。我无法理解它。 基本上我使用的是 Ember octane,我想从我的 route 访问我的模型到我的 controller .

这是我的路线

import Route from '@ember/routing/route';

export default class ChatIndexRoute extends Route {
  model() {
    return {
      chatMessages: [
        {
          username: '1',
          message: 'Hi',
          read: true,
        },
        {
          username: '1',
          message: 'how are you?',
          read: false,
        },
        {
          username: '1',
          message: 'its been a long time :)',
          read: false,
        },
      ],
    };
  }

  setupController(controller, model) {
    controller.set('model', model.chatMessages);
  }
}

这是我的控制器

import Controller from '@ember/controller';


export default class ChatIndexController extends Controller {
  init() {
    super.init(...arguments);
    console.log('test', this.model);
  }
}

当我console.log(this.model) 我得到了 undefined.

但是当我只是做一个console.log(this) 我得到了一个完整的对象,模型 属性 填充了 chatmessages

See this image

这太疯狂了

这只是时间上的一点混乱。 init() 在控制器上执行 before setupController 在路由上。所以 this.modelundefined.

但是当您执行 console.log(this) 时,您会记录完整的控制器。控制台的神奇之处在于它是实时的。所以当这个对象稍后(不久之后,只是一点点)更新时,您将在控制台中看到它。因此,您可以在控制台中检查控制器上的 model 属性,即使您登录控制器时它不存在。

一个解决方法是直接在模板中使用模型,另一个解决方法是使用计算属性。

export default class ChatIndexController extends Controller {
  init() {
    super.init(...arguments);
    console.log('test', this.model);
  }
  chatMessages: computed(function(){
     console.log(this.model); //will print the model
  }
}