首页 > 解决方案 > 为 JavaScript 转义 Laravel Blade @include 内容

问题描述

我正在使用 Laravel 中的动态表单。

我已经将可重用的表单位抽象为带有一些 JS 逻辑的,以根据用户添加另一个小部件时传递的 id@include来处理递增的表单id。name=[]

当用户单击以将另一个小部件添加到表单时,我想简单地使用递增的计数器调用包含 -这一切都已排序- 但是,@include对于 JavaScript 的输出并不友好。

环顾四周,我发现了以下内容:

https://laracasts.com/discuss/channels/general-discussion/blade-content-escaping

...似乎扩展刀片以创建自定义指令可能是答案:

https://laravel.com/docs/5.7/blade#extending-blade

我的问题是,我能不能@include用自定义指令来包装一个,比如说@js(@include())- 或者 - 这根本不是要走的路吗?

这是我整个项目中这种结构的唯一实例,所以我没有使用 VUE。

谢谢你。

编辑:

我试着把一个指令放在一起

Blade::directive('js', function ($expression) { return str_replace(array(' ', "\n", "\t", "\r"), '', $expression); });

问题是@include不评估......兔子洞

标签: javascriptlaravellaravel-blade

解决方案


您可能不会直接将 Blade 模板输出分配给 JavaScript 变量,但您可以使 Blade 输出不可见 ( display: none) 并使用 Javascript 引用它。

IE而不是:

var JsElement = @include('blade.template', $data)

您可以在刀片页面中执行此操作:

<div id="template-element" style="display: none">
    @include('blade.template', $data)
</div>

然后通过javascript引用并克隆它:

var JsElement = document.getElementById('template-element');
var clonedElement = JsElement.cloneNode()

推荐阅读