在作为资产包含的 javascript 文件中使用 Laravel 函数
Posted
技术标签:
【中文标题】在作为资产包含的 javascript 文件中使用 Laravel 函数【英文标题】:Using Laravel functions inside a javascript file that is included as an asset 【发布时间】:2013-05-14 07:20:45 【问题描述】:假设我有一段 jQuery javascript,它在加载时绑定到 div 并在该 div 中动态定义 img。像这样的:
$(document).ready(function()
$("#container").html("<img href='/images/myimage.jpg/>');
);
如果我在 Laravel 视图中使用这个内联,我可以使用 HTML::image() 和 Blade 模板来指定图像的位置。像这样的:
$(document).ready(function()
$("#container").html(" HTML::image('images/myimage.jpg', 'My image') ");
);
如果我要获取那段 javascript,而不是将其内联在视图中,而是将其放在单独的 .js 文件中,例如 public/js/image.js,我可以让 Laravel 将其作为资产加载;
Asset::add('image.js', 'js/image.js');
但是,由于它现在只被视为资产,因此 Laravel php 和 Blade 模板代码都没有被处理,所以我们从字面上得到字符串 HTML::image('images/myimage.jpg', 'My image') 在生成的 html 中,而不是模板化的值。
这样的事情有什么好的方法吗?
【问题讨论】:
如果不将其发送到服务器,您就可以通过 Blade 解析器运行它并取回已解析的字符串。或者您可以只使用原始 HTML,如您在第一个代码示例中所示。 你只是要求这个附加基本 URL 吗? 我只是为示例选择了细节。一种普遍接受的技术会很有用。 一般情况下 - 不要混合使用 php 和 JS。如果您需要将值传递给 JS 脚本,要么将其作为 HTML 中的元/链接标签输出,要么将一些 javascript 写入执行此类配置的页面 - 就像谷歌分析可能一样。 【参考方案1】:我认为你可以把它放在一个 php 文件中。我以前用 css 做过。
Asset::add('image.php', 'js/image.php');
【讨论】:
没有。这行不通。 CSS 可能包含在此技术中,但 PHP 文件仍不会被解析为 PHP 文件。【参考方案2】:我在这里做这个。我找到的方法是:
1 - 在视图目录树中创建一个“js”文件,类似于
app\views\javascript\mycustomJS.blade.php
2 - 然后在需要的地方渲染它:
<script>
@include('javascript.mycustomJS')
</script>
它是刀片,它会被处理。
我知道,这远非理想,但目前它对我有用。 :)
【讨论】:
我现在正在使用您的解决方案。你有没有找到更好的方法来解决这个问题?顺便说一句,感谢您的解决方案以上是关于在作为资产包含的 javascript 文件中使用 Laravel 函数的主要内容,如果未能解决你的问题,请参考以下文章
Rails 资产管道:包含所有 /vendor/assets/javascripts/ 的标准方式?
Android webview,在资产文件夹中加载javascript文件
Rails 3.1 资产管道和手动订购的 Javascript 需要
如何为 tvOS 包含 1x 1080p 和 2x 4K 视频资产