父模板函数parent
上例中,我们在继承父模板时,需要注入相应的父模板函数。这种方式可以让你继承任意的父模板,而并非一定是父类组件中定义的模板。但大多数情况下,我们都会继承父类组件中定义的模板,在子模板中,通过parent
模板函数名即可引用到父模板函数。
例如上例中,子模板无需注入this.layout = parentTemplate
,而是像下面这样做
// 直接通过parent引用父类中定义的模板
<t:parent>
<b:header-content>...</b:header-content>
<b:content>
...
</b:content>
</t:parent>
逻辑部分,无需注入父模板
var Page = Layout.extend({
template: template,
_init: function() {
return Promise.all([
...
]);
}
});
ES6
如果你使用class
语法定义组件,则需要使用Intact.template()
修饰器来修饰template
属性,这样才能够在派生组件中使用parent
变量引用到父类组件定义的模板
class Layout extends Intact {
@Intact.template()
get template() {
return `
<div>
<b:body>Layout</b:body>
</div>
`;
}
}
class Page extends Layout {
@Intact.template()
get template() {
return `
<t:parent>
<b:body>{parent()} Page</b:body>
</t:parent>
`;
}
}
使用修饰器(Decorator)语法,需要babel插件支持,babel@6可以这样做
npm install --save-dev babel-plugin-transform-decorators-legacy
,然后在.babelrc
中加入"plugins": ["transform-decorators-legacy"]
完整地控制整个页面,正是
Intact
一词的由来