5

在一个“页面”上显示两种不同类型的两种不同模型的实例的基本设置是什么?

例如,我有两个模型,比如 College 和 Student。每个都存储在 REST 服务器中。在某条路线上,我想提取每个的特定实例并显示每个的“名称”属性。

来自 Rails 世界,我不太了解 EmberJS 的 Model-View-Controller 概念。似乎在 EmberJS 中,每个控制器只能处理一种模型类型。那么这是否意味着必须为要显示的每种类型使用单独的控制器?

4

2 回答 2

4

在 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展示了这个概念。

希望能帮助到你

于 2013-05-21T00:53:28.783 回答
0

这个 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());
  }
});

(基于这个答案

于 2013-07-22T21:27:14.303 回答