在一个“页面”上显示两种不同类型的两种不同模型的实例的基本设置是什么?
例如,我有两个模型,比如 College 和 Student。每个都存储在 REST 服务器中。在某条路线上,我想提取每个的特定实例并显示每个的“名称”属性。
来自 Rails 世界,我不太了解 EmberJS 的 Model-View-Controller 概念。似乎在 EmberJS 中,每个控制器只能处理一种模型类型。那么这是否意味着必须为要显示的每种类型使用单独的控制器?
在一个“页面”上显示两种不同类型的两种不同模型的实例的基本设置是什么?
例如,我有两个模型,比如 College 和 Student。每个都存储在 REST 服务器中。在某条路线上,我想提取每个的特定实例并显示每个的“名称”属性。
来自 Rails 世界,我不太了解 EmberJS 的 Model-View-Controller 概念。似乎在 EmberJS 中,每个控制器只能处理一种模型类型。那么这是否意味着必须为要显示的每种类型使用单独的控制器?
在 ember 中,如果您严格遵循命名约定,那么您的假设是正确的,即最佳实践是每个视图的每个模型都有一个控制器,但在大多数情况下,如果要求不同,您也可以偏离约定,并满足您的需求你可以在概念上做这样的事情:
javascript
var App = Ember.Application.create();
App.IndexRoute = Ember.Route.extend({
model: function(){
return Ember.Object.create({post: App.Post.find(1), page: App.Page.find(1)});
}
});
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
App.Post = DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string')
});
App.Page = DS.Model.extend({
title: DS.attr('string'),
text: DS.attr('string')
});
App.Post.FIXTURES = [
{
id: 1,
title: "My super post",
description: "Lorem ipsum dolor sit amet..."
}
];
App.Page.FIXTURES = [
{
id: 1,
title: "My super page",
text: "Lorem ipsum dolor sit amet..."
}
];
模板
<script type="text/x-handlebars">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<h2>{{model.post.title}}</h2>
<p>{{model.post.description}}</p>
<hr/>
<h2>{{model.page.title}}</h2>
<p>{{model.post.description}}</p>
</script>
这里有一个工作的jsbin展示了这个概念。
希望能帮助到你
这个 jsbin展示了另一种显示两个模型的方式:org 模型(具有“名称”和“描述”属性)和成员模型(仅具有“名称”属性)。JSBin 设置了一个本地存储适配器,您可以在其中输入数据。
车把和 html:
Here are the Orgs:
<ul>
{{#each model}}
<li>{{name}} - {{description}}</li>
{{/each}}
</ul>
Here are the Members:
{{#each member in members}}
<li>{{member.name}}</li>
{{/each}}
关键在控制器中:
Javascript:
App.OrganizationRoute = Ember.Route.extend({
model: function() {
return App.Org.find();
},
setupController: function(controller, model) {
controller.set('members', App.Member.find());
}
});
(基于这个答案)