在html(和twig)中直接使用jquery 短版
通常,我通过编写一个xy.js来包含jquery,并将其包含在html/twig中。此文件使用ready()或load() 如果我在twig中的scipt标记中直接使用jquery,而不是在twig文件中的其他脚本标记中直接调用该函数,有什么缺点吗 长版本 在处理一个问题()时,我发现我需要一些真正基本的知识: 当通过自己的js文件包含jquery时,您可以执行以下操作: 加载DOM时,应使用在html(和twig)中直接使用jquery 短版,jquery,html,twig,Jquery,Html,Twig,通常,我通过编写一个xy.js来包含jquery,并将其包含在html/twig中。此文件使用ready()或load() 如果我在twig中的scipt标记中直接使用jquery,而不是在twig文件中的其他脚本标记中直接调用该函数,有什么缺点吗 长版本 在处理一个问题()时,我发现我需要一些真正基本的知识: 当通过自己的js文件包含jquery时,您可以执行以下操作: 加载DOM时,应使用$(document).ready()执行操作-确定 如果js依赖于资源,那么应该使用$(documen
$(document).ready()执行操作-确定
如果js依赖于资源,那么应该使用$(document).load()
,而这些资源在就绪时可能无法完全加载()
但是如果我在html中直接包含一些代码(在我的例子中是twig),那又怎么样呢。即:
...
{% block subtitleRechts %}
{% if app.user %}
<span id="add">
<a href="{{ path('add') }}" alt="add Item">
<img height="20" src="{{ asset('bundles/myBundle/images/plus.png') }}"></a>
</span>
<script>
$("#add a").each(function() {
var url = $("#add a").attr("href");
var $dialog = $('<div class="modalerDialog"></div>').
dialog({
autoOpen: false,
modal: true,
width: 460
});
$(this).click(function() {
$dialog.load(url, null, function (responseText, textStatus, XMLHttpRequest) {
var title = $('#addPage').attr('title')
$dialog.dialog('option', 'title', title);
}).dialog('open');
return false;
});
});
</script>
{% if whatever %}
$("#add a").trigger("click");
{% endif %}
{% endif %}
{% endblock %}
...
。。。
{%block subtitleRechts%}
{%if-app.user%}
$(“#添加一个”)。每个(函数(){
var url=$(“#添加a”).attr(“href”);
变量$dialog=$('')。
对话({
自动打开:错误,
莫代尔:是的,
宽度:460
});
$(此)。单击(函数(){
$dialog.load(url,null,函数(responseText,textStatus,XMLHttpRequest){
变量title=$('#addPage').attr('title'))
$dialog.dialog('option','title',title);
}).对话框(“打开”);
返回false;
});
});
{%if无论如何%}
$(“#添加”)。触发器(“单击”);
{%endif%}
{%endif%}
{%endblock%}
...
这应该在链接中添加一个ajax对话框,以防直接执行“whatever”
这在本地有效,但我不知道是否有任何缺点(除了在一个文件中混合twig、html和js)。在我的例子中,还将包含一个js文件
建议中的Thx。我想一个缺点是代码维护困难。也许更好的解决方案是创建一个模型,使用服务器端代码中的单个标志,如下所示:
//this one goes to separate .js file
function MyModel (){
this.Init = function () {
$("#add a").each(function() {
var url = $("#add a").attr("href");
var $dialog = $('<div class="modalerDialog"></div>').
dialog({
autoOpen: false,
modal: true,
width: 460
});
$(this).click(function() {
$dialog.load(url, null, function (responseText, textStatus, XMLHttpRequest) {
var title = $('#addPage').attr('title')
$dialog.dialog('option', 'title', title);
}).dialog('open');
return false;
});
});
}();
this.TriggerClick = function(boolean) {
if(boolean){
$("#add a").trigger("click");
}
};
}
//this one stays on the page
var model = new MyModel();
model.TriggerClick({% whatever %});
//这一个转到单独的.js文件
函数MyModel(){
this.Init=函数(){
$(“#添加一个”)。每个(函数(){
var url=$(“#添加a”).attr(“href”);
变量$dialog=$('')。
对话({
自动打开:错误,
莫代尔:是的,
宽度:460
});
$(此)。单击(函数(){
$dialog.load(url,null,函数(responseText,textStatus,XMLHttpRequest){
变量title=$('#addPage').attr('title'))
$dialog.dialog('option','title',title);
}).对话框(“打开”);
返回false;
});
});
}();
this.TriggerClick=函数(布尔值){
if(布尔){
$(“#添加”)。触发器(“单击”);
}
};
}
//这一个留在页面上
var模型=新的MyModel();
model.TriggerClick({%whatever%});
1。那么我的代码可以用了?2.一个自己的模型会更好!所有这些代码将放在哪里?模型是否也在细枝模板中定义?1。如果它以前起作用,那么这次也应该起作用。2.我已经在答案中标出了应该去哪里。只添加一次js文件:在模板中,如果它与整个页面相关,或者在页面上至少有多个位置,或者在单个页面上,如果它仅在那里使用。好的,代码将按照我希望的方向运行;-)谢谢。我将很快尝试这一点。似乎我在插入代码时在标记中犯了一些错误。我现在已经修复了它。我使用这个解决方案时做了一些小的修改,主要的区别是“缓存”链接并实现open(),当if-in-twig抱怨时,刚刚调用了open()。谢谢