Javascript EmberJS-在一条路径中访问多个模型

Javascript EmberJS-在一条路径中访问多个模型,javascript,ember.js,Javascript,Ember.js,我有两个不同的模块列表和联系人。每个都有自己的路线和控制器。现在有一个新的要求,联系人的部分信息必须在列表页面中可见。我很难弄清楚如何访问列表路径中的联系人模型 我浏览了Ember文档,发现有两种方法可以访问路由中的不同控制器。一个是控制器内的需要散列,另一个是路由内的设置控制器散列。我两次都试了,但都失败了。我很可能做错了什么。我在下面创建了一个JSFIDLE。如果有人能给我指出正确的方向,我将不胜感激 附言:我没有使用余烬数据,只是需要一点时间来适应路由器。只有当路由对应于当前url时,才

我有两个不同的模块
列表
联系人
。每个都有自己的路线和控制器。现在有一个新的要求,
联系人的部分信息必须在
列表
页面中可见。我很难弄清楚如何访问
列表
路径中的
联系人
模型

我浏览了Ember文档,发现有两种方法可以访问路由中的不同控制器。一个是控制器内的
需要
散列,另一个是路由内的
设置控制器
散列。我两次都试了,但都失败了。我很可能做错了什么。我在下面创建了一个JSFIDLE。如果有人能给我指出正确的方向,我将不胜感激


附言:我没有使用余烬数据,只是需要一点时间来适应路由器。只有当路由对应于当前url时,才会命中路由。因此,如果某个控制器(或该控制器上的模型)不是路由器树结构中的直接祖先,则您不希望依赖该控制器

列表和联系人都不应该相互依赖,因为它们的URL将是
/listings
/contacts
,并且它们只是兄弟姐妹。 列表可能依赖于联系人(联系人是一个祖先),但并非相反(
/contacts
/contacts/Listings
)。您会注意到,如果不通过联系人,您将无法访问列表,因此联系人将始终可供列表依赖和使用。 如果您需要在一条路线中使用多个模型,您可能需要签出(请务必阅读第二个答案,因为第一个答案可能会导致不必要的副作用)


示例:

我可能大错特错,但我相信
需要
只是提供控制器之间的依赖关系,而不是控制器的路由(因此,不是它们的模型)。这里要做的就是获取另一个控制器的实例。使用带有
DS.hasMany('someModel')
关系的数据建模可能更好地服务于这种场景。请看。@DuncanWalker这是真的,但我认为我们可以使用引用控制器的
content
属性访问另一条路线的模型。我尝试访问内容,但结果是空的。路由器将控制器的
content
属性设置为路由模型。我的猜测是,如果您没有点击路线,
content
没有被设置,因此,
content
是空的。@DuncanWalker那么您认为在一条路线中显示多个模块的正确方法是什么?我可以尝试为
列表
路线中的
联系人
控制器手动设置
内容
属性,但不确定这是否正确。而且,复制检索“联系人”模型的代码也没有意义。如果您在模型中使用属性上带有
async:true
的hasMany关系,您可以在联系人路由中调用
this.get('listings')
,反之亦然。我通常在路由的
setupController()
方法中执行此操作。谢谢您的时间<代码>联系人和列表确实是独立的。我有两个问题。我浏览了您在该线程中提供的答案,这非常有帮助,但您指出,在处理动态管线段时,使用模型挂钩会导致问题。那么,处理多个异步且可能涉及动态段的模型的最佳方法是什么呢?另外,出于某种原因,
RSVP.hash
在按照您的示例使用时会抛出错误。我更改了它以反映余烬文档。在上面更新的小提琴中,我使用了模型挂钩。但是,一旦返回哈希,我就不知道如何在模板中引用它。在fiddle的开发控制台中,您可以看到包含正确数据的哈希,但是
控制器
内容
属性仍然
未定义
。我对代码进行了一些更改。上面包括的例子。在模板中,您不需要指定
控制器。
,因为控制器是作用域。如果将承诺传递到哈希中,则不需要对其调用resolve/cast。如果您有任何问题,请询问。谢谢您的示例。帮了我很多忙。
CRM.Router.map(function() {
    this.resource('listings');
    this.resource('contacts');
});
CRM.Router.map(function() {
    this.resource('contacts', function(){
      this.resource('listings');
    });
});