如何在模块模式中使用JQuery-Object

时间:2014-11-09 14:12:13

标签: javascript jquery module-pattern

我在模块模式中使用JQuery。我有一个关于使用JQuery Objects的问题。

请参阅以下示例:

var myFeature = {

   'config' : {
        'container' : $('#myFeature'),

    'init' : function(config) {

        myFeature.config.container.css('display', 'none');

    }
}`

为什么上面的例子不起作用?在模块模式中使用Jquery Objects时最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

假设我在正确的位置添加了缺失的} (我最后还添加了一个分号,我不建议依赖自动分号插入的恐怖)

var myFeature = {
    'config' : {
        'container' : $('#myFeature'),
    }
    'init' : function(config) {
        myFeature.config.container.css('display', 'none');
    }
};

...然后,我能看到为什么它不起作用的唯一原因是,如果此代码在元素存在之前执行。因此,您的container属性最终会引用其中没有任何内容的jQuery集,因为在该属性初始化时,没有id {{1 }}

解决方案是在您知道元素存在时初始化"myFeature"属性,或者根本不使用container属性,因为{{1}查找元素非常,非常快。

如果元素位于页面的主标记中,请确保包含上述代码的container标记在标记后为。通常的建议是将id标记放在页面的最末端,就在结束script标记之前,以便页面标记中的所有元素都存在于脚本代码时运行。

答案 1 :(得分:1)

请参阅以下更改:

var myFeature = {
    'config' : {
        'container' : $('#myFeature')  // 1: removed comma
    },                                 // 2: added comma and right curly brace
    'init' : function(config) {
        myFeature.config.container.css('display', 'none');
    }
};                                     // 3: added semi-colon
  1. 额外的逗号有时会在旧版IE中导致错误
  2. 键/值对由哈希中的逗号分隔
  3. 在语句结尾处
  4. 需要分号。 "需要"是松散使用,但它比抱歉更安全