Permalink
Fetching contributors…
Cannot retrieve contributors at this time
185 lines (118 sloc) 4.43 KB

Javascript

Общее

Мы развиваем и поддерживаем свой js фреймворк.

Он позволяет легко писать собственные js классы и наследовать их друг от друга.

Используется глобальный namespace sx

Установка

В SkeekS CMS уже используется данный фреймворк.

Для установки в любой yii2 проект, можно использовать skeeks/yii2-sx пакет.

Базовые классы

Вот так можно получить ссылку на resize изображения.

sx.classes.Entity
sx.classes.Component
sx.classes.AjaxQuery
sx.classes.Cookie

Пространство видимости

Используется глобальный namespace sx

Если же нужно создать класс внутри области видимости нужно использовать следующую конструкцию.

sx.createNamespace('test.classes', sx);

Это позволит создавать классы внутри пространства sx.test.classes

Например:

sx.test.classes.Entity = sx.classes.Entity.extend({

});

Наследование

Пример конструкции наследования:

sx.classes.Product = sx.classes.Entity.extend({
    //Тут код расширяющий возможности класса Entity

    getCustomName: function()
    {
        return this.get('name') + " (" + this.get('article') + ")";
    }
});

Использование классов

var Product = new sx.classes.Product({
    "name" : "Подушка",
    "article" : "A15226",
});

Product.get('name'); //Подушка
Product.get('article'); //A15226
Product.getCustomName(); //Подушка (A15226)

Product.set('name', 'Новое название');
Product.get('name'); //Новое название

//объект продукт можно положить так же в пространство sx
sx.Product = new sx.classes.Product({
    "name" : "Подушка",
    "article" : "A15226",
});

Переопределение родительского конструктора

sx.classes.ProductCustom = sx.classes.Product.extend({

    construct: function (name, opts)
    {
        opts = opts || {};
        this.set('name', name);
        this.applyParentMethod(sx.classes.Product, 'construct', [opts]);
    }

});

//Тогда продукт нужно создавать так

new sx.classes.ProductCustom("Подушка", {
    "article" : "A15226",
});

Базовый компонент

sx.classes.Demo = sx.classes.Component.extend({

    _init: function()
    {
        //Тут код который исполняется сразу же в момент создания класса
    },

    _onDomReady: function()
    {
        //Тут написать код которые выполнится когда сработает событие domReady
    },

    _onWindowReady: function()
    {
        //Тут написать код которые выполнится когда сработает событие windowReady
    }
});

Подключение библиотеки к проекту на yii2

В шаблоне:

<?

//Минимум
skeeks\sx\assets\Core::register($this);
//Или более полную библиотеку
skeeks\sx\assets\Custom::register($this);

?>

Или через asset bundle:

namespace frontend\assets;

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/app.css',

    ];
    public $js = [
        'js/app.js',
    ];
    public $depends = [
        'skeeks\sx\assets\Custom',
    ];
}