如何使用 EmberJS 在路由中加载 ownTo/hasMany 关系

2023-12-21

在我的 Ember JS 应用程序中,我显示了一个约会列表。在约会控制器的操作中,我需要获取约会所有者,但所有者始终返回“未定义”。

我的文件:

模型/appointment.js

import DS from 'ember-data';

export default DS.Model.extend({
    appointmentStatus: DS.attr('number'),
    owner: DS.hasMany('person'),
    date: DS.attr('Date')
});

模型/person.js

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr('string')
});

模板/约会列表.js

{{#each appointment in controller}}
    <div>
        {{appointment.date}} <button type="button" {{action 'doIt'}}>Do something!</button>
    </div>
{{/each }}

控制器/appointmentlist.js

export default Ember.ArrayController.extend({
    itemController: 'appointment'
});

控制器/appointment.js

export default Ember.ObjectController.extend({
    actions:{
        doIt: function(){
            var appointment = this.get('model');
            var owner = appointment.get('owner'); //returns undefined
            //Do something with owner
        }
    }
});

现在,我知道我可以将所有者财产更改为owner: DS.hasMany('person', {async: true}),然后处理从返回的承诺appointment.get('owner');,但这不是我想要的。 我发现如果我这样做{{appointment.owner}}或这个{{appointment.owner.name}}在约会列表模板中,所有者记录是从服务器获取的。所以我猜 Ember 不会加载关系,除非它们在模板中使用。

我认为解决我的问题的方法是使用appointmentlists 路由来获取belongsTo 关系中的记录。但我不知道怎么做。

也许是这样的?

路线/约会列表.js

export default Ember.Route.extend({
    model: function() {
        return this.store.find('appointment');
    },
    afterModel: function(appointments){
        //what to do
    }
});

EDIT

我这样做了:

路线/约会列表.js

export default Ember.Route.extend({
    model: function() {
        return this.store.find('appointment');
    },
    afterModel: function(appointments){
         $.each(appointments.content, function(i, appointment){

                var owner= appointment.get('owner')   
         });
    }
});

它有效,但我不喜欢这个解决方案......


您仍然异步加载这些记录,因此如果您足够快,您仍然可能会遇到未定义的情况。最好从 afterModel 挂钩返回一个承诺,或者只修改模型挂钩来完成这一切。

model: function() {
  return this.store.find('appointment').then(function(appointments){
    return Ember.RSVP.all(appointments.getEach('owner')).then(function(){
      return appointments;
    });
  });
}

or

model: function() {
  return this.store.find('appointment');
},
afterModel: function(model, transition){
  return Ember.RSVP.all(model.getEach('owner'));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 EmberJS 在路由中加载 ownTo/hasMany 关系 的相关文章

随机推荐

  • 在 Yii 中,有没有办法使用 CActiveForm 验证表格输入?

    情况 我使用了 Yii 网站上的 wiki 文章 收集表格输入 http www yiiframework com doc guide 1 1 en form table 以如下为例 我不认为我需要针对多个模型验证传统意义上的表格输入 我只
  • 与静态库的链接不等于与其对象的链接

    Problem 与静态库链接时生成的固件映像与与直接从静态库中提取的对象链接时生成的固件映像不同 两个固件映像都没有错误地链接并成功加载到微控制器上 后一个二进制文件 与对象链接 按预期成功执行 而前一个二进制文件 链接到静态库 则不然 编
  • URLWithString:返回 nil

    这可能很容易 但我似乎不明白为什么URLWithString 在这里返回零 localisationName is a arbitrary string here NSString webName localisationName stri
  • jquery隐藏预加载[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 这是我的页面http equipe94 com 2009e html http equipe94 com 2009e h
  • 为什么这个任务提前返回?我做错了什么吗?

    我正在尝试设置一群具有最小耦合的工作人员 但我想使用 C async和任务 并非所有任务都是纯异步的 有些任务是完全同步的 这样做的动机是我想创建一些执行业务逻辑的简单方法 并使用System Threading Tasks TaskAPI
  • 检测 Mac OS X 上的调试器

    我试图检测我的进程是否正在调试器中运行 在 Windows 中有很多解决方案 在 Linux 中我使用 ptrace PTRACE ME 0 0 0 并检查其返回值 我没有设法在 Mac OS X 上执行相同的基本检查 我尝试使用 ptra
  • 请解释一下使用 std::ignore 的这段代码

    我正在阅读有关的文档std ignore http en cppreference com w cpp utility tuple ignore来自 cppreference 我发现很难掌握这个对象的真正目的 并且示例代码并没有很好地说明这
  • 如何使用 RxJS 显示“用户正在输入”指示器?

    我了解一点 BaconJS 但现在我尝试通过创建 用户正在输入 指示器来学习 RxJS 这很简单 可以用两个简单的规则来解释 当用户打字时 指示器应该立即可见 当用户停止键入时 指示器应该仍然可见 直到用户最后一次键入操作后 1 秒 我不确
  • 矩阵的行主布局与列主布局

    在编程密集矩阵计算时 是否有任何理由选择行优先布局而不是列优先布局 我知道 根据所选矩阵的布局 我们需要编写适当的代码来有效地使用缓存以达到速度目的 行主布局看起来更自然 更简单 至少对我来说 但是像 LAPACK 这样用 Fortran
  • 使用 Oracle 11g 的 Oracle 开发人员虚拟机

    I found here http www oracle com technetwork community developer vm index html带有 Oracle DB 和 Oracle Linux 的 VirtualBox 的
  • 编辑RefineryCMS 2.1 Menu Presenter以操作dom_id css和其他属性

    我目前正在尝试从 gem 版本更新现有的 RefineryCMS 应用程序 以便我可以同时添加 bootstrap 3 gem refinerycms gt 2 0 10 to gem refinerycms gt 2 1 0 在删除过时的
  • IO异常:Oracle升级到12g后出现Oracle Error ORA-12650

    在我们的 Oracle DB 从 11g 升级到 12g 后 我们得到了下面的堆栈跟踪 Io exception Oracle Error ORA 12650 我该如何解决这个问题 2015 10 26 14 59 36 319 RMI T
  • 需要一个插入行并返回 ID 的存储过程

    我尝试编写一个存储过程 首先将新记录插入表中 然后返回该新记录的 id 我不确定这是否是实现这一目标的正确方法和最佳方法 ALTER PROCEDURE dbo spAddAsset Name VARCHAR 500 URL VARCHAR
  • minitest - 模拟 - 期望关键字参数

    当我想验证模拟是否发送了预期的参数时 我可以这样做 mock expect fnc nil a b 但是 如果我想模拟的课程看起来像这样 class Foo def fnc a b end end 我如何模拟它并验证传递的值a b 下面是我
  • 判断一个数是完美数还是素数

    问题是 编写一个函数来判断一个数是素数还是完全数 到目前为止 我已经首先完成了完美的部分 这就是我所拥有的 include
  • Excel 如何比较 2 列范围

    我正在尝试比较 Excel 中的两组列范围 我知道标准比较公式 Eg A1 E1 我正在寻找的是以下公式的替代品 AND A1 E1 B1 F1 C1 G1 由于列数很大 我在想是否可以使用单元格范围 比 Chronocidal慢一点 只是
  • 星际争霸、帝国时代等即时战略游戏的协议是什么样的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对这些类型的游戏的协议 和游戏循环 如何工作感兴趣 任何指示或见解表示赞赏 我猜想主循环会有一个世界状态 每秒会前进几个 滴答声 但
  • 如何阻止 gke-metadata-server 继续生成此日志?

    我创建了一个部署 意味着在启用工作负载身份的情况下将消息从 pubsub 插入到 bigquery 云日志不断向我发送此类日志 insertId test jsonPayload message rpc id test computeMet
  • 是否有关于 Dagger 在注入依赖项时何时回退到反射的文档?

    我的团队在我们的 Android 应用程序中采用了 Dagger 进行依赖注入 我必须说到目前为止我们很喜欢它 然而 我们希望确保我们有效地使用它 我想知道是否有人可以解释或者是否有任何文档解释 Dagger 回退到反射来注入依赖项的情况
  • 如何使用 EmberJS 在路由中加载 ownTo/hasMany 关系

    在我的 Ember JS 应用程序中 我显示了一个约会列表 在约会控制器的操作中 我需要获取约会所有者 但所有者始终返回 未定义 我的文件 模型 appointment js import DS from ember data export