canjs – Stepan Suvorov Blog https://stepansuvorov.com/blog Release 2.0 Sat, 15 Sep 2012 14:14:49 +0000 en-US hourly 1 https://wordpress.org/?v=6.3.1 Наследование в CanJS https://stepansuvorov.com/blog/2012/09/%d0%bd%d0%b0%d1%81%d0%bb%d0%b5%d0%b4%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2-canjs/ https://stepansuvorov.com/blog/2012/09/%d0%bd%d0%b0%d1%81%d0%bb%d0%b5%d0%b4%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2-canjs/#comments Sat, 15 Sep 2012 14:14:49 +0000 http://stepansuvorov.com/blog/?p=586 Continue reading ]]>

Для начала скажу что CanJs, это форк от JavaScriptMVC, который был разобрал вот тут.

Так вот, разбирая наследование контроллеров во фреймворке, не сразу поняли как оно работает. Пример в официальной документации был не очевиден, а гугление не дало быстрого ответа.

Все конечно же оказалось просто, но дошли мы к этому не сразу. Надеюсь этот посто облегчит жизнь тем, кто столкнется с аналогичным вопросом.

Итак, пример. Для начала создадим родительский класс, с методом, который уначледуется, и свойством, которое будет переопределено:

var Parent = can.Control({
    name:'parent',
    showName: function(){ alert(this.name) }
})

Теперь внимание – дочерний класс мы создаем уже не через can.Control, через уже существующий класс Parent:

var Child = Parent({
    param:'child'
})

Теперь создадим объекты и вызовем в каждом из них наш метод:

var parent = new Parent('#parent');
var child = new Child('#child');
parent.showName();
child.showName();

Поддерживается цепочное наследование, т.е. мы дальше можем получать наслдеников от Child:

var SubChild = Child({
    param:'subchild'
})

События, а точнее обработчики событий, тоже наследуются. Что изначально было подвергнуто сомнению.

Итоговый код:

var Parent = can.Control({
    param:'parent',
    showName: function(){ alert(this.param) },
    'click': function(){ this.showName() }
})

var Child = Parent({
    param:'child',
})

var SubChild = Child({
    param:'subchild',
})

var parent = new Parent('#parent');
var child = new Child('#child');
var subchild = new SubChild('#subchild');

Поиграться с ним можно вот тут.

]]>
https://stepansuvorov.com/blog/2012/09/%d0%bd%d0%b0%d1%81%d0%bb%d0%b5%d0%b4%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2-canjs/feed/ 1