jQuery模块化脚本架构 - 延迟加载与内联加载

时间:2013-02-02 01:50:38

标签: jquery jquery-plugins

我正在构建一个template.htm页面,其中包含几个加载了ajax的内容块。因为我遇到了问题,所以我加载了synchronously这样的东西:

    $.ajax({
        url: 'module.htm'
    })
    .done(function(r) {
        $('#moduleA').html(r);
    });

我这样做了好几次,加载了各种不同的module.htm文件。所有这些文件都有一个标准的html文件<!DOCTYPE html>和标题,正文等。那里也有大量的jQuery。

其中一些模块具有动态添加的元素,大多使用.append()这样的

$.ajax(......)
.done(function(response) {
    var item = $.parseJSON(response);
    // iterating voer the JSON and appending elements
    $('div').myPluginMethod(); // utilizing the plugin here
});

我为特定的$.fn.myPluginMethod使用插件,并发现了一个问题:

问题:<script>标题中使用module.htm加载插件并在template.htm之外单独运行时,一切正常。在控制台中,我可以输入$.fn.myPluginMethod并返回该功能。

但是如果我将module.htm文件加载到父template.htm页面中,它就不再有效了。在控制台中,键入$.fn.myPluginMethod会返回undefined

没有意义。 Firebug将插件脚本显示为已加载,为什么会失败?

我的理论 不知怎的,我认为这与我的ajax-load有关。 .done()方法在某种程度上无法“看到”插件的对象,因此会抛出unknown method error。我可以手动粘贴插件然后它可以工作:

$.ajax(......)
.done(function(response) {
    var item = $.parseJSON(response);
    // iterating voer the JSON and appending elements
    // I can paste my raw plugin code here and it will work, but that's silly
}); 

我试图理解为什么这个ajax业务会引发问题。我认为一旦插件被加载到DOM中,所有脚本(无论是否动态)都能够“看到”它的方法。

感谢。

1 个答案:

答案 0 :(得分:2)

听起来你正在从远程文件中再次加载jQuery.js。这将覆盖主页面中的jQuery对象。然后,将删除注册到初始jQuery对象的所有插件。