什么是加载依赖于页面的面向对象的JS属性的最佳方法?

时间:2011-12-21 14:22:03

标签: javascript jquery oop

我已经和外部JS脚本文件一起运行了所有我的对象,一旦文档准备好就像这样......

jQuery(function($) {
    var Main = {
        run: function () {
             myFunction.setup();
        }
    }

    var myFunction = {
        setup: function() {
            //Do some stuff here
        } 
    }

    Main.run();
});

我希望能够只在某个页面上运行myFunction.setup(),否则我会遇到错误,如果该方法在页面上寻找不存在的元素,例如幻灯片,菜单等。< / p>

目前我已经通过检查元素是否存在.length,如果它确实运行了方法的其余部分,但我想知道是否有更好的方法?也许就好像在基于页面im加载时可以将变量发送到脚本文件中所以它知道运行什么方法?

任何帮助都会非常感激。

由于

贾尔斯

2 个答案:

答案 0 :(得分:1)

Paul Irish有一个很好的方法来完成这个,使用body标签中的ID和类来执行某些代码块:

http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

答案 1 :(得分:0)

这种事情可能有所帮助:

特定于网页

var page_config = {
    setup_allowed: true
    // ... more config
};

<强>通用

var Main,
    myFunction;

(function ($, _config) {
    myFunction = (function () {
        var _public = {};
        if (_config.setup_allowed === true) {
            _public.setup = function () {

            };
        }
        return _public;
    })();

    Main = (function () {
        var _public = {};
        if (typeof myFunction.setup !== "undefined") {
            _public.run = function () {
                myFunction.setup();
            };
            // Run it as we had Main.run() before
            _public.run();
        }
        return _public;
    })();

})(jQuery, page_config);

这种方式Main.run()myFunction.setup()仅在page_config中指定时才可用。

这是你可以玩的working example。这可能对您的特定要求有点冗长,但希望它在某种程度上有所帮助: - )