Agnostic Javascript Framework Adapter для jQuery и Mootools? - PullRequest
2 голосов
/ 23 сентября 2010

Я собираюсь перенести серию своих проектов jQuery на Vanilla Javascript (чистый javascript, без фреймворка) и хотел бы знать, существуют ли какие-либо существующие [адаптеры фреймворков / независимые от фреймворков]?

Например, я представляю что-то вроде этого:

// My Project
(function(){
    // Fetch all the elements using Sizzle Selector System
    var $els = Agnostic.find('.penguins');
    $els.hide();

    // Perform a Ajax Request
    Agnostic.ajax({
        dataType: 'json',
        sucess: function(){

        },
        error: function(){

        }
    });
});

/**
 * Our Agnostic Framework
 * Provides a framework agnostic interface for jQuery and MooTools
 */
var Agnostic = {
    framework: null,
    Framework: null,

    /**
     * Initialise our Agnostic Framework
     */
    init: function(){
        switch ( true ) {
            case Boolean(jQuery||false):
                Agnostic.Framework = jQuery;
                Agnostic.framework = 'jQuery';
                break;

            case Boolean(MooTools||false):
                // Check for Sizzle
                if ( typeof Sizzle === 'undefined' ) {
                    throw new Error('MooTools interface requires the Sizzle Selector Engine.');
                }
                Agnostic.Framework = MooTools;
                Agnostic.framework = 'MooTools';
                break;

            default:
                throw new Error('Could not detect a framework.');
                break;
        }
    }

    /**
     * Our Element Object
     * Used to Wrap the Framework's Object to provide an Agnostic API
     */
    Element: {
        /**
         * Create the Element Wrapper
         */
        create: function(Object){
            var El = new Agnostic.Element;
            El.Object = Object;
        },

        /**
         * Hide the Element
         */
        hide: function(){
            switch ( Agnostic.framework ) {
                case 'jQuery':
                    this.Object.hide();
                    break;

                case 'MooTools':
                    this.Object.setStyle('display','none'); 
                    break;
            }
        },

        /**
         * Show the Element
         */
        show: function(){
            switch ( Agnostic.framework ) {
                case 'jQuery':
                    this.Object.show();
                    break;

                case 'MooTools':
                    this.Object.setStyle('display',''); 
                    break;
            }
        }
    },

    /**
     * Fetch elements from the DOM using the Sizzle Selector Engine
     */
    find: function(selector){
        var Element = null;

        // Fetch
        switch ( Agnostic.framework ) {
            case 'jQuery':
                Element = jQuery(selector);
                break;

            case 'MooTools':
                Element = new Elements(new Sizzle(selector)); 
                break;
        }

        // Wrap
        Element = Agnostic.Element.create(Element);

        // Return Element
        return Element;
    },

    /**
     * Perform an Ajax Request
     * We use the jQuery.ajax interface here
     * But they are more or less the same
     */
    ajax: function(request){
        // Send Request
        switch ( Agnostic.framework ) {
            case 'jQuery':
                jQuery.ajax(request);
                break;

            case 'MooTools':
                (new Request(request)).send();
                break;
        }

        // Wrap
        Element = Agnostic.Element.create(Element);

        // Return Element
        return Element;
    }
};

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

Я не видел предварительно упакованный «Каркасный мост». Есть хороший разговор об абстрагировании фреймворка от вашего приложения Николасом Закасом. Это действительно хорошо и подробно о важности отделения вашей платформы от вашего приложения.

http://developer.yahoo.com/yui/theater/video.php?v=zakas-architecture

0 голосов
/ 24 сентября 2010

Я полагаю, что вы можете найти новую (альфа-версию) FuseJS именно той вещью, которую вы ищете.

Цитата из самой первой строки readme:

Фреймворки JavaScript имеют схожие функции и функции, такие как манипулирование DOM, регистрация событий и механизмы выбора CSS.FuseJS пытается объединить сильные стороны этих фреймворков в одну стабильную, эффективную и оптимизированную базовую фреймворк JavaScript.

Это также изящно из-за его встроенных в песочницу нативов .(Это тоже отдельная библиотека!) У меня еще не было возможности поиграть с ними (например, в тестах производительности и браузера), но концепция очень изящная.(В основном, он использует ряд приемов, чтобы обеспечить способ расширения массива, объекта и т. Д., Не расширяя глобальные версии этих объектов. Заинтригован еще?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...