Ember.js-页面上有多个组件
我试图建立一个余烬应用程序,我遇到了一些困难 我有一个索引路由,我想在下面的页面中呈现它:Ember.js-页面上有多个组件,ember.js,Ember.js,我试图建立一个余烬应用程序,我遇到了一些困难 我有一个索引路由,我想在下面的页面中呈现它: +--------------------------+ | Welcome, foo@bar.com | +--------------------------+ | | | New Posts | | --------- | | *foo | |
+--------------------------+
| Welcome, foo@bar.com |
+--------------------------+
| |
| New Posts |
| --------- |
| *foo |
| *bar |
| *baz |
| |
+--------------------------+
所以我有一个账户
模型和一个Post
模型。(没有任何相关字段)
我在以下方面有概念上的困难:
Ember routes有一个model
方法,该方法返回路线的模型。但是,如果我希望多个模型与我的路线相关联,该怎么办?在这种情况下,我有账户
和帖子
。如何使它们都可用于我的页面
我尝试过的一件事是使用setupController
并在控制器上手动设置account
和posts
,以便模板可以访问它们。但是如果我能做到这一点,模型
方法的意义是什么
为什么Ember只想将路线与单个模型关联
感谢您的建议
谢谢,
丹尼尔
我尝试过的一件事是使用setupController并在控制器上手动设置帐户和帖子,以便模板可以访问它们
您所做的是正确的,这就是setupController
挂钩的作用
但是如果我能做到这一点,模型方法的意义是什么!?为什么Ember只想将路线与单个模型关联
在RC3中,阻止默认行为是不可能的。在RC4中,实现setupController
钩子可以防止发生默认行为。这对于开发人员迁移到新版本来说是一个潜在的突破性变化
另外请注意,如果您的路由实现了setupController
钩子,并且您希望保留默认行为(也会调用模型
),请确保从setupController
钩子中调用。\u super()
。您可以在发布的博客文章中阅读更多内容
希望有帮助。使用
model
回调有一些优点:
链接到“someRoute”模型时,当您单击该链接并转换到另一个路由时,该路由将使用您传入的模型作为其模型(无需调用模型回调来获取数据)
model
回调获取所需的数据,然后在setupController
中,将数据传递给第二个参数
请注意我的意思,setupController从model
callback获取数据。如果model
回调返回承诺,则路由将等待该承诺得到解决,然后从承诺中获取数据。如果承诺正在处理,则不会调用setupController
,也不会呈现模板
App.PostsRoute = Em.Route.extend({
model: function() {
// The server response an array of posts like [{name: 'foo'}, {name: 'bar'}, {name: 'baz'}]
return $.get('/api/posts.json');
},
setupController: function(controller, model) {
console.log(model); // it's array, not promise object
controller.set('model', model);
}
});
当您可以使用setupController
执行相同的操作时,如下所示:
App.PostsRoute = Em.Route.extend({
setupController: function(controller, model) {
$.get('/api/posts.json').then(function(data) {
controller.set('model', data);
});
}
});
但是,setupController
不支持promise,这意味着如果您在setupController
中从服务器获取数据,Ember将在准备数据之前呈现模板。在很多情况下,这不是我们想要的
但是,模型
似乎不是从服务器获取多个数据的好地方。您可以使用带有多个承诺的Ember.RSVP.all
来实现这一点。但是你也需要考虑<代码>链接到。我不确定什么是最佳实践
获取路由中的多个数据并等待它们在呈现模板之前准备好。如果有人有好的解决办法,请告诉我
对于你的情况,我认为你可以用不同的方法来做这件事。毕竟我想的是“欢迎”,foo@example.com“是所有页面的顶部栏,对吗?然后您可以将其放入
ApplicationRoute
,并在application.hbs
模板中呈现帐户信息。谢谢,这很有意义。有趣的是,model()
即使在我实现setupController
时也会被调用。但是我可以接受。谢谢你详细的回答!了解Ember.RSVP确实非常有用。以前,我认为在不使用setupController的情况下,每个路由只能有一个端点/模型。关于链接到的你是对的,但我可以接受我的用例。