jqmobi插件制作(翻译)

应用程序框架插件是可重用的代码,以帮助增强您的应用程序的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);

posted on 2013-04-12 10:36  liuyong1855  阅读(290)  评论(0编辑  收藏  举报

导航