在html(和twig)中直接使用jquery 短版

在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

通常,我通过编写一个xy.js来包含jquery,并将其包含在html/twig中。此文件使用ready()或load()

如果我在twig中的scipt标记中直接使用jquery,而不是在twig文件中的其他脚本标记中直接调用该函数,有什么缺点吗

长版本 在处理一个问题()时,我发现我需要一些真正基本的知识:

当通过自己的js文件包含jquery时,您可以执行以下操作:

加载DOM时,应使用
$(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()。谢谢