Ember.js 我可以让用户自定义组件的模板吗?
我正在制作一个可排序的组件。您可以想象一个具有以下API的简单实现: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
{{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}}