应用程序框架插件是可重用的代码,以帮助增强您的应用程序的peices。它们可以被用来执行琐碎的任务,或者创建复杂的UI小部件。有两种类型的插件,你可以创建。
实用插件,不采取行动的对象
插件作用于一个桶/元素
如果你有一个预先存在的jQuery插件,使用的功能我们实现,你的代码应该是相当容易移植。大多数情况下,你只是需要更改参考在IIFE中,从“jQuery的”,“JQ”
首先,我们会告诉你的基本结构创建一个插件,然后告诉你如何创建一个实用工具插件,并最终作用于一个桶中的元素。
创建一个插件时,你应该先启动通过创建IIFE(立即调用的函数表达式)和延长$ FN对象。
(function($){ $.fn.myPlugin=function(){ };})(jq)上面创建了一个简单的功能,然后可以通过$()访问。为myplugin()。有几个提示操作时,要记住里面的插件。
javascript变量“,这”将是主应用程序框架对象。
要启用链接,您必须返回“本”
在这里,我们将告诉你如何做一个实用的插件,不作用于对象。
(function($){ $.foo=function(){ alert("bar"); };})(jq)要访问上述功能,我们会调用$ foo()的; - 在执行时,它会提醒“酒吧”。但是如果你想链呢?下面将创建一个函数,将保持本地计数器变量,我们将提醒
(function($){ var counter=0; $.foo=function(){ alert("Counter = "+counter); counter++; return this; };})(jq)当我们执行,我们将第一时间看到“计数器=0”。下一次,我们将看到“反=1”。注意“返回”的一部分,这使我们能够链的命令,这样我们就可以运行$ foo()的foo()的;
现在,我们将创建一个插件作用的元素。我们将得到所有的innerHTML他们,并提醒他们
(function($){ var counter=0; $.foo=function(){ var str=""; for(var i=0;i<this.length;i++) { str+=this[i].innerHTML; str+=" | "; } alert(str); return this; };})(jq)与上述情况,我们可以提醒所有的div的内容做$(“DIV”)foo()的;
下面是一个示例先进的插件。这个插件创建一个谷歌地图您指定的容器中的对象。谷歌地图缓存的对象,这样你就可以再稍后访问。
// @author Ian Maffett// @copyright App Framework 2012(function () { var gmapsLoaded = false; //internal variable to see if the google maps API is available //We run this on document ready. It will trigger a gmaps:available event if it's ready // or it will include the google maps script for you $(document).ready(function () { if(window["google"]&&google.maps){ $(document).trigger("gmaps:available"); gmapsLoaded = true; return true; } var gmaps = document.createElement("script"); $("head").append(gmaps); window["gmapsPluginLoaded"] = function () { $(document).trigger("gmaps:available"); gmapsLoaded = true; } }); //Local cache of the google maps objects var mapsCache = {}; //We can invoke this in two ways //If we pass in positions, we create the google maps object //If we do not pass in options, it returns the object // so we can act upon it. $.fn.gmaps = function (opts) { if (this.length == 0) return; if (!opts) return mapsCache[this[0].id]; //Special resize event if(opts=="resize"&&mapsCache[this[0].id]) { return google.maps.event.trigger(mapsCache[this[0].id], "resize"); } //loop through the items and create the new gmaps object for (var i = 0; i < this.length; i++) { new gmaps(this[i], opts); } }; //This is a local object that gets created from the above. var gmaps = function (elem, opts) { var createMap = function () { if (!opts || Object.keys(opts).length == 0) { opts = { zoom: 8, center: new google.maps.LatLng(40.010787, -76.278076), mapTypeId: google.maps.MapTypeId.ROADMAP } } mapsCache[elem.id] = new google.maps.Map(elem, opts); google.maps.event.trigger(mapsCache[elem.id], 'resize'); } //If we try to create a map before it is available //listen to the event if (!gmapsLoaded) { $(document).one("gmaps:available", function () { createMap() }); } else { createMap(); } }})(jq);