Показать сообщение отдельно
  #22 (permalink)  
Старый 23.07.2012, 08:03
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Очередное обновление.

Немного оптимизирован код, исправлены пару мелких багов. Добавлены возможности. Теперь можно создавать классы любой вложенности, например:
Class("ui.fx.Animation", {
    // ...
})
данный класс будет доступен как ui.fx.Animation, так же можно и расширять классы:
Class("ui.Button extends ui.fx.Animation", {
    // ...
})
создастся класс ui.Button с унаследованными свойствами от ui.fx.Animation.

Следующее нововведение это возможность объявлять классы совершенно в любом порядке. То-есть ранее нужно было учитывать порядок. Например нужно было перед объявлением класса ui.Button объявить класс ui.fx.Animation. Но теперь можно сначала объявить класс ui.Button а уже потом где-то ниже или подключить позже класс ui.fx.Animation, при этом все будет работать корректно. Наглядный пример:
<script type="text/javascript" src="https://github.com/devote/jsClasses/raw/master/core.class.min.js"></script>
<script>
Class( "Foo extends Bar", {
    test: function() {
        return this.name;
    }
});

Class( "Bar", {
    name: "Vasya"
});

alert( (new Foo()).test() );
</script>
Есть возможность отключить кеширование файлов при использовании Class.imports, достаточно где-то в начале кода установить значение:
Class.imports.disableCaching = true;
и все загружаемые файлы всегда будут вновь загружаться с сервера, это удобно для отладки кода.

Так же можно перехватить ошибку загружаемого модуля, допустим при создании экземпляра класса не удалось найти класс от которого нужно наследоваться, в этом случае сработает событие Class.autoload, пример:
<script type="text/javascript" src="https://github.com/devote/jsClasses/raw/master/core.class.min.js"></script>
<script>
Class( "Foo extends Bar", {
    test: function() {
        return this.name;
    }
});

Class.autoload = function( className ) {

    alert( "Не найдет класс " + className + " в контексте " + this );

    // тут можно вернуть конструктор другого класса например:
    return Class({
        name: "Petya"
    });

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

alert( (new Foo()).test() );
</script>
честно говоря над методом Class.autoload нужно еще поработать, мне конечно не совсем пока нравится как это работает. Поэтому в будущих версия этот метод возможно претерпит изменения.

Так же забыл сообщить о том что при использовании метода Class.imports можно перехватить ошибку загрузки, пример:
Class.imports([
    "somefile.js",
    "somefile2.js"
], function(){
    // succes loaded
}, function( status, url ) {
    alert( "Ошибка загрузки файла: " + url + ", статус ошибки: " + status );
    // если вернуть значение true, то загрузка остальных файлов продолжится не смотря на ошибку.
    // В противном случае загрузка файлов не будет продолжена.
})
насчет обработки ошибок тоже вполне возможно будут изменения, но пока не решил как улучшить и т.д.

Если есть идеи/пожелания/критика, с удовольствием выслушаю.

Спасибо.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 31.01.2013 в 10:32.
Ответить с цитированием