我正在查看
SlickGrid的JavaScript源代码.
我注意到slick.grid.js有以下结构:
(function($) { // Slick.Grid $.extend(true,window,{ Slick: { Grid: SlickGrid } }); var scrollbarDimensions; // shared across all grids on this page //////////////////////////////////////////////////////////////////////////// // SlickGrid class implementation (available as Slick.Grid) /** * @param {Node} container Container node to create the grid in. * @param {Array,Object} data An array of objects for databinding. * @param {Array} columns An array of column definitions. * @param {Object} options Grid options. **/ function SlickGrid(container,data,columns,options) { /// <summary> /// Create and manage virtual grid in the specified $container,/// connecting it to the specified data source. Data is presented /// as a grid with the specified columns and data.length rows. /// Options alter behavIoUr of the grid. /// </summary> // settings var defaults = { ... }; ... // private var $container; ... //////////////////////////////////////////////////////////////////////// // Initialization function init() { /// <summary> /// Initialize 'this' (self) instance of a SlickGrid. /// This function is called by the constructor. /// </summary> $container = $(container); ... } //////////////////////////////////////////////////////////////////////// // Private & Public Functions,Getters/Setters,Interactivity,etc. function measureScrollbar() { ... } //////////////////////////////////////////////////////////////////////// // Public API $.extend(this,{ "slickGridVersion": "2.0a1",// Events "onScroll": new Slick.Event(),... // Methods "registerPlugin": registerPlugin,... }); init(); } }(jQuery));
为了简洁和清晰,已经省略了一些代码,但这应该给你一个总体的想法.
>以下是什么目的:(function($){// code}(jQuery));这是我看过的模块模式吗?这是否意味着保持全局命名空间清洁?
> .extend()行的意思是什么?:顶部$.extend(true,{// code});看起来像是与“命名空间”有关系;什么是命名空间?它看起来像底部的$.extend(this,{// code});用来暴露“公众”的成员和职能?你如何定义私有函数或变量?
>如果您想要,您将如何初始化多个“SlickGrids”?他们会分享多少,他们将如何互动?注意“构造函数”函数:function SlickGrid(…){// code}.
>这种风格的编码有哪些书籍,链接和其他资源?谁发明了?
谢谢! ♥
解决方法
这是一个jQuery插件.
(function($){// code}(jQuery));给你一个新的函数范围,所以你的名字不会转储到全局范围.将jQuery作为$,让您可以使用$速记,即使其他Javascript库使用$.
$.extend是一种将属性从一个对象复制到另一个对象的jQuery方法.第一个真理意味着它应该是一个深而不是浅的副本.通过扩展窗口,创建新的全局属性,在这种情况下,创建Slick.
底部的$.extend(this,…)在大写的函数SlickGrid中. SlickGrid旨在用作构造函数,这将是新创建的对象,因此这种扩展是向对象添加属性.他们是公共成员.在此代码示例中,measureScrollbar是私有的:它只对该函数中定义的代码可见,而不在外部.
您可以创建一些网格:
var grid1 = new Slick.Grid(blah,blah); var grid2 = new Slick.Grid(blah,blah);