You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
data={name:"jhon",profile:{age:12}}functiona(){return"<p>Hello, my name is "+this.name+". I\'m "+this.profile.age+"years old.</p>";}functiona(){varr=[];r.push("<p>Hello, my name is ");r.push(this.name);r.push(". I'm ");r.push(this.profile.age);r.push(" years old.</p>");returnr.join("");}a.call({name:'jshn',profile:{age:12}});
如何通过正则替换和函数执行实现简单的
采用
innerHTML
写入带html标签的string方案
思路
匹配出模版变量类似(<%=name%>) 替换成数据
正则方法 demo
正则的问题
函数方法
思路 通过正则匹配,替换(<%=name%>)成变量,输出一个可执行函数。函数执行时写入变量。
不断的切片过程 string + val + string ...
嵌套数据 demo2
带有逻辑for while if else demo3
以上参考http://krasimirtsonev.com/blog/article/Javascript-template-engine-in-just-20-line, 有了基本概念,我们再来看underscore的实现
underscore如何实现
实际的原理,就是通过
+
拼接字符串的一个可执行函数。_.template(tpl)第一步compile的过程返回了可执行的fn
。填充数据只是给fn绑定上下文。完成调用。通过正则,不断区分出String 和 模版自定义填充的变量
<%= name%>
。替换简单变量
带逻辑
总结:通过上面的例子可以发现,underscore的模版引擎是将整段的htmlString,重新写入到dom当中。(不是很经济呐)
QA
参考资料
The text was updated successfully, but these errors were encountered: