jer*_*rry 3 php jquery decoupling
我有一个php应用程序,它使用一个Listener类,它基本上只是用jquery设置一个ajax请求(下面的例子).但由于某种原因,回应javascript似乎不够优雅.更好的做法是为要传递的javascript(可能引入耦合)构建单例类,还是像我现在正在做的那样回显脚本?
这是我正在做的代码片段.
<?php
$script = "
<script>
$(document).ready(function(){
$('".$trigger."').".$action."(function() {
".$js_variables."
var ajax_load = '';
var loadUrl = '".$this->controller_path."';
var action = $(this).attr('id');
$('".$this->parent."')
.hide(2)
.html(ajax_load)
.load(loadUrl, {action: action, ".$post_mapper."})
.fadeIn(800);
});
});
</script>
";
echo $script;
?>
Run Code Online (Sandbox Code Playgroud)
编辑:使用单例类也允许我只使用$(document).ready()或快捷版本$(function(){})一次,而不是每次添加一个监听器.但我不确定这是否值得花费额外的时间和精力......任何想法?
用PHP回应JavaScript是不好的做法?
一般来说:是的
从php回应JavaScript是一种常见的做法,但我强烈反对它.
在大多数情况下,您可以通过遵循前端MVC结构来避免混合语言:
HTML属于.html*文件.这是模特.
CSS属于.css文件.这是观点.
JS属于.js文件.这是控制器.
我发现我实际上需要从服务器端语言生成JavaScript是非常罕见的.大多数时候我真正需要的是传递JavaScript可以使用的信息.
而不是尝试输出:
<a href="#" id="foo">bar</a>
<script>
$('#foo').click(function () {
$.ajax('http://example.com')...
return false;
});
</script>
Run Code Online (Sandbox Code Playgroud)
对于每个链接,尝试使用本机HTML属性来完成大部分繁重工作:
<a href="http://example.com/" class="ajax-link">bar</a>
Run Code Online (Sandbox Code Playgroud)
在你的脚本中你可以:
$(document).on('click', '.ajax-link', function () {
$.ajax($(this).attr('href'))...
return false;
});
Run Code Online (Sandbox Code Playgroud)
委托函数只需绑定一次,可以从静态JS文件中完成,无需尝试将JS注入PHP代码.
如果您需要传递更多信息,请结合使用data-*属性.data(...).
*或.php用于模板的任何其他服务器端语言.
有一些利基原因可以从服务器回显客户端代码.一个示例是为JSONP API生成JSON,您需要动态生成回调.
如果你没有一个真正的好理由与服务器端语言生成JS,不要.
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |