【发布时间】:2017-03-29 21:15:10
【问题描述】:
在 Ruby on Rails 中,在我的控制器中,我可以执行以下操作:
def jstest
respond_to do |format|
format.js
end
end
这将从相关视图目录返回 jstest.js.erb
jstest.js.erb
alert("Hello World")
结果是我收到了 hello world 警报。
我想在 Laravel 中做同样的事情
在我的控制器中,我有:
public function jstest( )
{
return view('jstest');
}
在我看来(我已经尝试过 jstest.blade.js 和 jstest.js)
但我收到错误消息,无法找到视图。
我让它工作的唯一方法是调用视图 jstest.blade.php 并将我的 js 包含在这个 php 文件中的 <script> 标记中。但这感觉有点不对劲……?
这在 Laravel 中是否可行?如果是这样,我哪里出错了?
示例用例:
想象一下下面的例子,我有一个 cmets 表,用户可以点击一个删除按钮,该按钮将发送一个 ajax 请求来删除评论。
我的路线:
Route::delete('post/comments/{comment}','commentsController@delete');
在我的控制器中:
Public Function delete($comment)
{
$comment->delete();
return commentDeleted.js
}
commentDeleted.js:
$(#comment).remove();
所以从用户的角度来看,他们点击删除,评论从屏幕上消失,而不加载新页面。
【问题讨论】:
-
基本上,您所追求的是将一些 .js 粘贴到 HTML 中并允许您使用它的功能,而无需在 .js 文件周围指定 HTML。那么真正的问题在哪里呢?创建一个
jsview()函数,该函数将在一些.blade.php中包含相关的JS 文件。还有,怎么会觉得不对劲呢?这很简单,你拥有一切随心所欲。view()从相关目录返回一个.blade.php文件。根据需要扩展此系统。 -
也许它只是来自 Rails,但是返回一个带有 HTML 脚本标签的 php 文件似乎比我真正想要的只是返回 Javascript 需要更多的努力。为什么我不能只说
return view('jstest.js'); -
因为
view()获取并执行.blade.php视图,这是一些与HTML 混合的PHP。view('test')返回resources/views/test.blade.php。正如我所提到的,您可以创建自己的函数来执行您想要的操作。我会发布一个关于这个的答案。 -
谢谢,非常感谢。你说的很有道理,我只是认为可能有更明确的方式来做到这一点。
-
@Brad 正如您所提到的,您正在使用 ajax 进行删除,对吗?那为什么你在js成功后不删除你的评论。只需从控制器返回 true 或 false 。