我有以下情形:
- 我们正在使用的web2py在服务器端
- 我们所服务的一些ember.js页
- 目前这些ember.js页是一个iframe内,因为ember.js与模板{{}}标记的web2py冲突 。 这意味着我们不能轻易地混用web2py的模板和模板ember.js。
- 所以,我已经实现了辅助类的解决方案:
class em(DIV)
- 现在,我要处理的原余烬标记HTML文件,并产生EM-标记的文件,整合ember.js和web2py的模板系统成有机的整体。
为此,我需要改变的所有实例{{XXX}}
在ember.js文件{{= EM(“XXX”)}}, 其中包括跨越几行实例。 我想到的是怎么回事正则表达式,但我想,以避免重新发明轮子(而不必使用陌生的角落例)
您可以在解析这些类型的模板的蟒蛇认为一个通用的方法。 这是一个简单的寻找开始和结束分隔符(事{{
和}}
然后将一个=em('XXX')
装卸换行 ,并保持格式 (即保持换行符如果有一些) 。
注意:这其实不是ember.js具体是; 它可以适用于任何基于分隔符的多行模板系统。
注意,在web2py中的主干版本(这将被释放的web2py 2.0在接下来的几天里),你现在可以指定自定义分隔符的模板 - 这样你就可以改变web2py的分隔符,使他们不再冲突余烬。 JS分隔符。 例如,在一个模型文件:
response.delimiters = ['{%', '%}']
然后在你的web2py的模板,你可以这样做:
{%=P('hello world')%}
<p>{{ember template code}}</p>
{%=P('{{ember template code generated by web2py}}')%}
这将产生:
<p>hello world</p>
<p>{{ember template code}}</p>
<p>{{ember template code generated by web2py}}</p>
注意,response.delimiters设置在每个请求,所以如果你不想或者通过在具体行动将其设置为改变所有的网页,但只有那些包含烬代码,可以有条件地设置response.delimiters web2py的分隔符(需要它,或者通过检查在一个模型文件所请求的控制器和/或功能)。 例如,在一个模型文件:
if request.function in ['action1', 'action2', 'action3']:
response.delimiters = ['{%', '%}']
或在控制器中:
def action1():
response.delimiters = ['{%', '%}']
[etc.]
这可能值得尝试的方法在保持所有Ember.js的东西在不同的文件,并且不与web2py的模板混吧。 幸运的是,Ember.js轻易允许这样做。