【问题标题】:How to access model data in Ember controller如何在 Ember 控制器中访问模型数据
【发布时间】:2017-10-06 02:41:20
【问题描述】:

我主要是 Ember 的新手。 我想在我的控制器中访问模型数据。 我正在使用 Ember.RSVP.hash 在我的路线中加载多个模型。

我的路线

 model(params) {
   this.set('id', params.userID);
   return Ember.RSVP.hash({
     dashboards: this.store.findAll('dashboard', params)
      .then((dashboards) => dashboards.toArray()),
     user: this.store.find('user', params.userID)
    })
  },
  setupController(controller, model) {
    controller.setProperties(model);
  },

用户模型

export default DS.Model.extend({
  userID: DS.attr('string'),
  email: DS.attr('string'),
  name: DS.attr('string'),
  picture: DS.attr('string'),
  active: DS.attr('boolean'),
  permissions: DS.attr(),
  created: DS.attr('utc'),
  password: DS.attr('string')
});

然后我尝试访问用户模型参数之一。在我的控制器中,我创建了初始化函数并尝试访问用户模型参数。我写的:

  init() {
    console.log(this.get('user.name'));
  },

在那之后我得到了未定义。 这样做的正确方法是什么?

【问题讨论】:

  • 尝试在路由中使用方法 => afterModel(model is the first arg)

标签: ember.js model controller ember-data


【解决方案1】:

在您的控制器上使用this.get('model') 来访问您的模型数据作为一个整体。您也可以使用Ember.get(this, 'model.user.name');。你可以使用类似的东西:看看the actions

但是init 是一个急切的钩子! model 属性尚未设置在 init 钩子上!

【讨论】:

    【解决方案2】:

    你不应该访问它init 方法。您可以使用 {{model.user}} 在模板中访问它。

    • findAll - 你不需要传递 params 参数,你从模型钩子中得到它。
    • find 已弃用,请使用查询或查询记录
    • 然后应该返回类似(dashboards) => return dashboards.toArray()的值
    • 您不需要覆盖 setupController,因为默认情况下它会在控制器中设置模型挂钩返回值。
    • 只需确保使用 Ember 检查器将数据加载到存储中即可。

    准备twiddle for basic demonstration

    【讨论】:

    • 感谢您的建议!我想要做的是访问我的控制器中的模型数据,例如具有模型参数之一的变量。
    • 你可以像你正在做的那样访问它this.get('user.name')。但不在 init 方法中。看看这个旋转基本演示ember-twiddle.com/…
    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多