模板传递
模板片段可以像普通对象一样赋值并且传递。当一个组件结构支持完全自定义时,我们可能需要为组件的每一处自定义模板,利用模板传递,这很容易做到。
例如,在菜单组件中,我们点击菜单触发器,就会弹出菜单,假设菜单触发器和菜单都可以自定义模板,我们可以如下这么做:
<div>
<div ev-click={self.toggle.bind(self)}>
{self.get('triggerTemplate')}
</div>
<div v-if={self.get('show')}>
{self.get('menuTemplate')}
</div>
</div>
var Menu = Intact.extend({
template: template,
defaults: function() {
return {
show: false,
triggerTemplate: null,
menuTemplate: null
};
},
toggle: function() {
this.set('show', !this.get('show'));
}
});
然后我们在使用Menu
组件时,自定义triggerTemplate
和menuTemplate
的内容
var Menu = Menu;
<Menu
triggerTemplate={<button>{self.get('title')}</button>}
menuTemplate={<ul>
<li v-for={self.get('list')}>
{value}
</li>
</ul>}
/>
Intact.extend({
template: template,
defaults: function() {
this.Menu = Menu;
return {
title: '书籍(点击展开/收起)',
list: ['Javascript编程', '时间简史', '红楼梦']
};
}
});