Предоставление открытых методов в XUI JS Framework плагин? - PullRequest
1 голос
/ 12 августа 2011

Я создал плагин для 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 голосов
/ 12 августа 2011

Лиам, что может быть более полезным, так это понимание причины, по которой вы хотели бы это сделать? Вы всегда можете выставить функцию через обратный вызов.

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>

Это не проверено, но должно работать.

...