PaulGuo / Juicer

A Lightweight JavaScript Template Engine.
http://juicer.name
MIT License
915 stars 263 forks source link

和laravel5 冲突 #74

Open gy0624ww opened 9 years ago

gy0624ww commented 9 years ago

比如在blade.php 里用@each 则会提示 Undefined property: Illuminate\View\Factory::$renderEach

zhang6464 commented 9 years ago

改下边界符号就好吧,laravel的blade默认用的{@做边界符,你可以改blade的边界符,也可以改juicer的

blade的替换如下

// 更换blade的变量定界符,以避免与angularjs冲突
Blade::setContentTags('{{<', '>}}');
Blade::setContentTags('{{{<', '>}}}', true);

juicer的可如下设置,把{@替换为喜欢的即可

juicer.set({
    'tag::operationOpen': '{@',
    'tag::operationClose': '}',
    'tag::interpolateOpen': '${',
    'tag::interpolateClose': '}',
    'tag::noneencodeOpen': '$${',
    'tag::noneencodeClose': '}',
    'tag::commentOpen': '{#',
    'tag::commentClose': '}'
});

还可以扩展blade的指令,添加literal指令,使指定区块不编译,这里我用的是默认@符号,可以用blade的常量替换掉,看下源码或手册即可。

// 添加@literal标记以实现类似smarty的原始数据输出
Blade::extend(function($view, $compiler)
{
    $pattern = '/(?<!\w)(\s*)@literal(.*)?@endliteral/s';
    return preg_replace($pattern, '$1$2', $view);
});
gy0624ww commented 9 years ago

我修改过juicer的边界符号,依然会有冲突,因为blade是php文件,先与js解析,所以遇到不明符号会报错,比如@each 我的解决方法是这样的:

把juicer 模板写到单独的html结尾的文件,然后用在laravel blade视图中include 承载juicer模板的html 文件

Panfen commented 8 years ago

以.html结尾的文在laravel5.2中使用@include()的方式加载会提示找不到该文件