Vdt模板编译的结果,会添加如下代码
function(obj) {
var self = this.data, scope = obj;
....
}
vdt.render()
方法这样调用模板函数
var vdt = {
render: function() {
template.call(vdt, data);
...
}
}
所以
this
模板中this
指向vdt
实例self
模板中self
指向渲染到模板的数据this.data
scope
模板中scope
指向传入模板的数据data
一般情况下,scope === self
,但是当模板存在继承时就不相等了,例如:
-
// @file ./layout.vdt
console.log(self, this)
<div>
<p>scope.name: {scope.name}</p>
<p>self.name: {self.name}</p>
<p>this.data.name: {this.data.name}</p>
</div>
var layout = require('./layout.vdt');
<t:layout name="Vdt" />
-
var vdt = Vdt(template);
vdt.render({
name: 'Virtual-Dom'
})
上例中,self & this
保持不变,但是scope
等于继承layout
时传入的数据{name: 'Vdt'}