Для начала скажу что 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');
Поиграться с ним можно вот тут.