使用Javascript Object Literals存储变量

时间:2013-05-06 22:00:24

标签: javascript jquery dom

我正在使用Paul Irish基于DOM的路由模式(http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/)来组织我的代码。

我的问题是:如何使用这种方法存储/回调我想在整个网站中使用的变量?

通常我会做类似的事情:

var $button = $('.button');
var $link = $('.link');

如何将上述变量存储集成到以下模式中?

NS = {
   common : {
     init: function(){
       $button.doSomething();
      }
   },
   home : {
     init: function(){
        $link.doSomethingElse();
      }
   },
   utils : {
     init: function(){}
   }
}

UTIL = {

  fire : function(func,funcname, args){
  // indicate your obj literal namespace here
  var namespace = NS; 

  funcname = (funcname === undefined) ? 'init' : funcname;
    if (func !== '' && namespace[func] && typeof namespace[func][funcname] == 'function'){
      namespace[func][funcname](args);
    }

  },

  loadEvents : function(){

    // get body id
    var bodyId = document.body.id;
    var classNm = document.body.className;

    // fire up common
    UTIL.fire('utils');
    UTIL.fire('common');

    //fire up page specific js
    UTIL.fire(bodyId);
    UTIL.fire(bodyId,classNm);
  }

};

// kick it all off here 
$(document).ready(UTIL.loadEvents);

1 个答案:

答案 0 :(得分:0)

除非我遗漏了某些内容,否则你应该能够做到以下几点。

NS = {
    domElements: {
        $button: null,
        $link: null
    },
    common : {
        init: function(){
            if (NS.domElements.$button === null) {
                NS.domElements.$button = $('.button');
            }
            var $button = NS.domElements.$button;
            $button.doSomething();
        }
    },
    home : {
        init: function(){
            if (NS.domElements.$link === null) {
                NS.domElements.$link = $('.link');
            }
            var $link = NS.domElements.$link;
            $link.doSomethingElse();
        }
    },
    utils : {
        init: function(){}
    }
}