在模型挂钩后设置控制器属性

2023-12-04

我需要在之后设置一个控制器属性model钩。我可以想到两种方法来做到这一点:

model(params) {
  return this.store.findRecord('user', 1);
},

afterModel(model, transition) {
  model.get('profile').then(profile => {
    this.set('profile', profile);
  });
},

setupController(controller, model) {
  controller.set('model', model);
  controller.set('profile', this.get('profile'));
},

另一种方法。即跳过setupController:

model(params) {
  return this.store.findRecord('user', 1);
},

afterModel(model, transition) {
  model.get('profile').then(profile => {
    this.controller.set('profile', profile);
  });
},

两者似乎都有效。

这两种方法是否有任何额外的优点/缺点?显然,后者更短。但是在中设置控制器属性感觉“干净”吗?afterModel hook?

EDIT: 之间的关系/关联user and profile is async.


正如另一位海报所指出的,您可以访问model.profile,但这在代码中不起作用,如果profile是一个异步关联:

// models/user.js
profile: belongsTo('profile', { async: true })

原因是model.profile将返回一个承诺而不是一个值。要解决这个问题,您可以使用afterModel按照您的建议进行挂钩,但您所需要的只是

afterModel(model, transition) {
  return model.get('profile');
},

这将发出异步调用并暂停转换直到完成,此时profile可以访问为model.profile照常。如果出于某种原因您确实希望将配置文件作为控制器属性访问以避免必须在其前面加上前缀model.,只需在控制器中定义一个别名:

profile: Ember.computed.alias('model.profile')  

如果有多个这样的属性,则应执行以下操作:

return Ember.RSVP.Promise.hash(this.getProperties('profile', ...));

您还可以在model钩子,尽管它的可读性有点差:

model() {
  return this.store.findRecord('user', 1) .
    then(user => user.get('profile') . 
      then(() => user)
    );
}

这意味着,找到用户,然后在找到时获取他的个人资料(这将导致异步请求触发),然后当找到时从承诺中返回用户,因此它被正确设置为model.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在模型挂钩后设置控制器属性 的相关文章

随机推荐

  • Java 打包/构建 Jar 文件具体常用技术

    我浏览了该网站的所有常见帖子 但我的问题略有不同 打包具有许多其他 jar 文件作为依赖项的简单 Java 应用程序的最佳实践是什么 例如 我有 foo java 其中包含 main 以及从 foo java 访问的 foo1 java f
  • 取矩阵 r 中行的平均值

    我有以下深度和温度数据矩阵 855 行 2 列 并且想取每列中每 3 行的平均值 例如 1 6 7 18 91 2 5 4 18 91 3 4 0 18 59 4 6 7 20 37 5 6 7 20 05 6 2 7 20 21 7 4
  • PYQT:如何捕获python解释器的输出并将其显示在QEditText中?

    参考帖子here 有人可以给我详细解释如何将 print 语句的输出附加到 PYQT 中的 QEditext 我尝试了上面给出的代码 但它不完整 我得到 TypeError connect slot argument should be a
  • PHP 和 MySQL 错误:类 mysqli_result 的对象无法转换为字符串 [重复]

    这个问题在这里已经有答案了 我收到错误 mysqli result 类的对象无法转换为字符串 Code
  • 强命名会导致 C# 中的对象序列化出现问题吗?

    我序列化一些配置对象并将结果字节存储在数据库中 new BinaryFormatter Serialize memoryStream instance Convert ToBase64String memoryStream ToArray
  • 像 facebook 一样从 Javascript 更改 URL

    我目前正在开发一个面向 AJAX 的 Web 应用程序 我一直在寻找使用浏览器 URL 复制当前 AJAX 状态 或应用程序状态 的不同方法 因此刷新和后退按钮也可以工作 在过去的几周里 我看到了涉及使用哈希 和不同 JS 框架的不同方法
  • 如何在现有表单中显示 FSharp.Charting 图表?

    我不明白如何创建图表控件并将图表放置在现有表单中 我在网上找到的所有示例都以新表单显示图表 但我想将图表添加到我现有的表单之一 我在想这样的事情 let form new Form Text My form let lbl new Labe
  • R 函数识别不匹配的行

    我正在尝试比较 2 个 data frames V1 代表我的 CRM V2 代表我想要发送的潜在客户 V1 大约有 8k 个元素 V2 大约有 25k 个元素 我需要将 V2 中的每一行与 V1 中的每一行进行比较 丢弃 V1 中存在 V
  • 如何在.Net Framework中将方法注入到自动属性中

    我有一些具有许多属性的 Foo 类 public class Foo public int Property1 get set public int Property2 get set public int Property3 get se
  • 在 Redshift 中拆分行

    在我的表中 数据如下 col1 col2 col3 col4 A1 A2 A3 4 B1 B2 B3 3 C1 C2 C3 1 我需要如下输出 col1 col2 col3 col4 A1 A2 A3 1 A1 A2 A3 2 A1 A2
  • 如何在更多线程上运行 boost asio 解析器服务?

    我在 SNMPV2 实现中使用 boost asio ip udp resolver 来确定主机是否可达 using Resolver boost asio ip udp resolver Resolver resolver ioServi
  • 如何在 Perl 源代码中嵌入中文字符?

    在我的脚本中 我需要将一些汉字 qw 到字符串中 当我运行脚本时 perl 指出脚本中存在无法识别的字符 虽然我知道它一定与编码相关的东西有关 但我不知道如何解决它 所以向你寻求帮助 提前致谢 在 Perl 源代码中嵌入文字字符串很容易 使
  • 如何防止应用程序在完成任务之前关闭?

    我用 C 制作了一个 Windows 控制台应用程序 可以进行一些计算 应用程序窗口对用户来说是不可见的 应用程序作为任务运行 这些计算结果保存到数据库中 不幸的是 如果用户在保存数据期间关闭此应用程序 通过关闭计算机 并且并非所有数据都会
  • 使用 Spark 并行缓存和查询数据集

    我有一个要求 我想缓存一个数据集 然后通过在该数据集上并行触发 N 个查询来计算一些指标 并且所有这些查询都会计算类似的指标 只是过滤器会发生变化 并且我想在其中运行这些查询并行 因为响应时间至关重要 并且我想要缓存的数据集大小始终小于 G
  • 如何创建 100M 字节缓冲区

    我正在测试 Linux 上接口的吞吐量 我正在使用 DMA 进行数据传输 DMA 需要连续的内存位置 但 kmalloc 无法分配超过 1MB 的空间 有没有其他方法可以创建高达 100M 字节的大缓冲区位置 我认为 kmalloc 无法分
  • IBM Worklight 6.0.0.1 - 推送通知轮询在生产环境中不起作用

    我的问题是这样的 When in 开发环境 一切正常 轮询器工作正常 数据库状态发生变化等 When in 生产环境 日志中没有出现任何内容 数据库中也没有任何变化 我正在从数据库表中读取通知 推送通知事件来源 WL Server crea
  • 来自数据库结果的 PHP 多维数组

    我对多维数组有点陌生 想看看我做得是否正确 最好 我想在主数组中命名数组以便于使用 unique array array username gt array user id gt array weeknumber gt array 然后我有
  • 使用 jquery 突出显示选定的文本

    当用户选择 html 页面中的任何文本时 我想添加自定义样式 例如color red 到它 这将充当突出显示工具 类似于您在某些用于阅读 pdf 文件的应用程序中看到的工具 为此我声明highlight 获取所选文本及其位置的函数 func
  • 如何以如下形式创建对象:ifstream in();

    我是 C 初学者 我见过好几次创建对象时 如下所示 class name object name 之后 您可以将 object name 引用为该类的对象 我怎样才能在课堂上做到这一点 我应该重写构造函数吗 以及如何做到这一点 这行代码可能
  • 在模型挂钩后设置控制器属性

    我需要在之后设置一个控制器属性model钩 我可以想到两种方法来做到这一点 model params return this store findRecord user 1 afterModel model transition model