Ember 个带有 itemController 的组件

Ember components with itemController

我在路线 posts 上有 1 条时间线,有 2 种 post:来自 facebook 和来自 twitter,两者都使用相同的控制器:post 有 2 种方法:isFacebookisTwitter.

每种类型的 post 和一个 'post-index' 都有一个组件,使用这 2 种方法重新生成正确的组件。

路线 post 默认 ArrayController:

 <ul class="timeline">
  {{#each post in model itemController="posts.post"}}
    <li> {{post-index post=post}} </li>
  {{/each}}
</ul>

post-指数

{{#if post.isFacebook}}
   {{post-facebook post=post}}
{{/if}}

{{#if post.isTwitter}}
    {{post-twitter post=post}}
{{/if}}

{{yield}}

问题是当我尝试在路由 post.post 中使用 post-index 模板渲染单个 post 路线:

export default Ember.Route.extend({
    setupController(controller, model) {
        this._super(controller, model);
        controller.set('model', model);
  }
});

模板:

 <ul class="timeline">
     {{#each post in model}}
         <li> {{post-index post=post}} </li>
      {{/each}}
 </ul>

我的路线 posts 之所以有效,是因为它有 itemController="posts.post" 但是 post.post 没有。我该怎么办?

如果我对你的问题理解正确,你想知道如何将 post 本身传递给 post 再传递给 post-indexpost 属性 .

如果是这样,您可以修改您的代码如下:

 <ul class="timeline">
     {{#each post in model}}
         <li> {{post-index post=this}} </li>
      {{/each}}
 </ul>

唯一的变化是将post更改为this。由于您在 each 块中,this 将传递当前迭代的项目。