@5ftech
你问的问题给了我很大的灵感,这样很酷,但是我觉得这样已经超出模板template这个名字的范围了,先velocity,所以,也不知道叫什么名字好。
如果你希望template会根据vm而变化,我觉得应该把template变成element,要不然字符串怎么自动变化呢?你说是吧。 这样就稍微修改了一下,有了另一个修改版本:
avalon.htmlElementTemplate = function(element, md) {
var result = tmpString;
var _tmpId = Math.random().toString();
var vm = avalon.define(avalon.mix(true, md, {
$id: _tmpId
}));
var rd = avalon.scan(tmpString, vm);
result = avalon.vdom(rd.vnodes, 'toHTML');
//result= rd.root.dom.outerHTML;
//delete avalon.vmodels[_tmpId];
//rd.vnodes[0].dom.innerHTML = rd.vnodes[0].dom.innerHTML.replace(//gmi, '')
return {
htmlString: result.replace(//gmi, ''), //原来版本的一样的模板字符串
vm: vm // 绑定element的avalon vm
}
}
以上函数执行后返回对象带2个属性,htmlString是原来html模板一样的,第二个是绑定这个element(第一个参数)的vm。 不过需要注意,这样element用完了,需要自己销毁 vm。需要自己销毁vm,需要自己销毁vm。
结合jquery的使用案例:
var $element = $("
remote.html的内容:
不过我想,这样的话,和原来的用法就没有区别了,直接avalon.scan(element) ,模板的意义就在于不变的模板在不同模型创造出不同的内容。