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

Javascript 在XUI JS框架插件中公开公共方法?,javascript,mobile,javascript-framework,xui,Javascript,Mobile,Javascript Framework,Xui,我已经为XUI创建了一个插件,例如: xui.extend({ myPlugin : function(){ var options = []; function methodOne(obj){ } function methodTwo(){ } } }); 现在我可以打电话: <script type="text/javascript"> xui.ready(function

我已经为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, 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的东西,但当然不依赖于megajquery,也不依赖于XUI。我有一个处理页面导航的方法,可以处理“页面”转换,但我还需要能够以编程方式触发该方法


也许以上内容会帮助其他XUI人员,它目前正在为我工作,但可能会有所改进?

利亚姆更有用的可能是了解您希望这样做的原因?您始终可以通过回调公开函数

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>

这是未经测试的,但应该可以工作。

实际上很有用,因为某些mu方法确实需要添加回调,但我并没有像描述中那样有用。。。我需要能够静态地调用插件中的一些方法,即不在对象上调用。我将编辑我的答案,因为我可能已经找到了一种方法,尽管它并不优雅……您可以在xui.extend之外编写myPlugin函数,然后将其传递给xui.extendmyPlugin。这样你就可以自己使用它,作为一个插件,我仍然不明白你为什么需要在插件之外访问它。刚刚编辑了我的原始问题,但是现在你的建议很有意义!
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>