在XUI JS框架插件中公开公共方法?

时间:2011-08-12 13:30:07

标签: javascript mobile javascript-framework xui

我为XUI创建了一个插件,例如:

xui.extend({
    myPlugin : function(){

        var options = [];

        function methodOne(obj){

        }

        function methodTwo(){

        }
    }
});

现在我可以致电:

<script type="text/javascript">
xui.ready(function(){

    // call my plugin on an XUI object
    x$('element').myPlugin();

});
</script>

但是我还需要能够访问插件中的一些方法,比如这样(这段代码不起作用,但说明了我想要实现的目标)

<script type="text/javascript">
xui.ready(function(){

    // call my plugin on an XUI object
    x$('element').myPlugin();

    var foo = bar;

    // call one of my methods?
    xui.fn.myPlugin.methodOne(foo);

});
</script>

任何对XUI移动框架有更多经验的人都能伸出援助之手吗?干杯

编辑**

以下作品虽然可能不是很优雅......

xui.extend({
    myPlugin : function(){

        // create an API object
        var api = {
            'publicOne' : function(obj){
                return methodOne(obj)
            }
        };

        // add our API object to prototype
        xui.fn.myPlugin.api = api;

        /**
        * the functions of the plugin
        **/

        // we'll expose this in the API object
        function methodOne(obj){
            // Do something with obj...
        }

        function methodTwo(){

        }
    }
});

然后在页面上我可以使用它:

<script type="text/javascript">
xui.ready(function(){

    // call my plugin on an XUI object, which does its thing
    x$('element').myPlugin();

    // arbitary
    var foo = x$('#bar');

    // call one of the methods statically
    xui.fn.myPlugin.api.pluginOne(foo);

});
</script>

为了解释目的,我正在创建一些与JQTouch非常相似的东西,但当然不依赖于巨型jQuery并且只是坐在XUI之上。我有一个处理页面导航的方法,它处理“页面”转换,但我需要能够以编程方式触发该方法。

也许上面会帮助其他XUI人员,它目前正在为我工​​作,但也许可以改进?

1 个答案:

答案 0 :(得分:0)

Liam什么会更有用可能是理解你想要这样做的原因?您总是可以通过回调公开该函数。

xui.extend({
    myPlugin : function(callback){

        var options = [];

        function methodOne(obj){

        }

        function methodTwo(){

        }

        if(typeof callback === 'function') {
            return callback(this);
        }
    }
});

然后这样称呼:

<script type="text/javascript">
xui.ready(function(){

    // call my plugin on an XUI object
    x$('element').myPlugin(function(myPublic) {
        var foo = bar;

        // call one of my methods?
        myPublic.methodOne(foo);
    });
});
</script>

这是未经测试但应该有用。