Ember.js 我可以让用户自定义组件的模板吗?

Ember.js 我可以让用户自定义组件的模板吗?,ember.js,Ember.js,我正在制作一个可排序的组件。您可以想象一个具有以下API的简单实现: {{sortable-list content=orderedQuestions tag='ul' itemTag='li'}} 但是,这提供了非常有限的模板定制。理想情况下,我希望API允许以下内容: {{#sortable-list content=orderedQuestions tag='ul'}} <li> <h2>{{title}}</h2> <div

我正在制作一个可排序的组件。您可以想象一个具有以下API的简单实现:

{{sortable-list content=orderedQuestions tag='ul' itemTag='li'}}
但是,这提供了非常有限的模板定制。理想情况下,我希望API允许以下内容:

{{#sortable-list content=orderedQuestions tag='ul'}}
  <li>
    <h2>{{title}}</h2>
    <div>Some more {{details}}</div>
  </li>
{{/sortable}}
但这不起作用,因为用户传递到组件中的块模板将控制器作为其上下文


我所追求的是可能的吗?

你正在尝试做的事情目前还不可能

看一看,可以看到围绕这样的组件用例的大量讨论。特别是看看崔克的第一句话

另一种方法是将组件分解为多个组件:

{{#sortable-list content=orderedQuestions tag='ul'}}
  {{#each orderedQuestions}}
    {{#sortable-item tag='li'}}
      <h2>{{title}}</h2>
      <div>Some more {{details}}</div>
    {{#sortable-item}}
  {{/each}}
{{/sortable}}
如果您从现有HTML元素的角度考虑组件,您可以看到它看起来有点像一个包含选项的select。为了实现这一点,可能需要将可排序项与可排序列表进行通信。一个选项是在组件中使用parentView来访问父级

从Ryan Florence获得关于如何处理可组合组件的更多想法

使现代化 更新了我的答案,在{{sortable item}}周围包含一个each,以更改上下文


通读全文,似乎一个组件可以做你想做的事情,但它看起来真的很毛茸茸的。

所以我担心——事实上,几天前我也在处理类似的问题。我真的希望有一天能在灰烬中看到这片土地!在您的示例中,块组件中的{{title}}是否仍然访问控制器属性,而不是组件属性?
{{#sortable-list content=orderedQuestions tag='ul'}}
  {{#each orderedQuestions}}
    {{#sortable-item tag='li'}}
      <h2>{{title}}</h2>
      <div>Some more {{details}}</div>
    {{#sortable-item}}
  {{/each}}
{{/sortable}}