看看Backbonejs对extend function的实现,它表明它不是一个基本的原型扩展,当主干扩展直接转换为TypeScript类时,有些东西会停止运行。将Backbonejs(模型,集合,路由,视图,历史)的每个组件转换为typescript类并确保没有任何内容被破坏的正确方法是什么?
谢谢!
更新 this Q/A中的答案也适用于其他骨干构造。
答案 0 :(得分:1)
这是因为TypeScript生成的代码首先调用Router构造函数然后声明路由。
由TypeScript编译器生成的代码
...
function AppRouter() {
_super.apply(this, arguments);
this.routes = { // <= routes defined after _super constructor
"*actions": "defaultRoute"
};
}
...
要解决此问题,只需在TypeScript对象构造函数上调用Backbone Router函数_bindRoutes()
。
示例:
class AppRouter extends Backbone.Router {
routes = {
"*actions": "defaultRoute"
}
constructor(){
super();
// call _bindRoutes() here function to bind your routes
(<any>this)._bindRoutes();
}
defaultRoute() {
document.write("Default Route Invoked");
}
}
var app_router = new AppRouter();
Backbone.history.start();
下载示例代码here