如何在Click with Typescript方法

时间:2015-10-09 18:02:38

标签: javascript jquery typescript

我在使用jquery关于点击功能的类中调用私有方法时遇到了一些问题。当我加载我的网络应用程序时,我得到以下内容:

Uncaught TypeError: _this.changeView is not a function

这就是我的课程。

module web {

    export class Menu {

        constructor(evt) {
            // text
        }

        private init() : void {

            this.menu = $(".application-menu a");
            this.menu.on("click", (evt) => this.changeView(evt) );
        }

        private changeView(evt : any) : void {
            console.log("do something");
        }

    }

}

如何使用typescript方法作为回调来调用jquery的点击功能?

1 个答案:

答案 0 :(得分:0)

这对我有用......虽然我做了一些调整和补充测试,但基本原则没有改变。

我不确定你打算在哪里调用init方法...要么你在其他地方调用它(在这种情况下它不能是私有的),或者你打算在课堂上调用它,但你没有在你的问题中显示。为了演示的目的,我把它公之于众。

module web {

    export class Menu {
        private menu: JQuery;

        constructor() {
            // text
        }

        init() : void {

            this.menu = $(".application-menu a");
            this.menu.on("click", (evt) => this.changeView(evt) );
        }

        private changeView(evt : any) : void {
            console.log("do something");
        }
    }
}

var menu = new web.Menu();
menu.init();

这将编译为以下JavaScript ...

var web;
(function (web) {
    var Menu = (function () {
        function Menu() {
            // text
        }
        Menu.prototype.init = function () {
            var _this = this;
            this.menu = $(".application-menu a");
            this.menu.on("click", function (evt) { return _this.changeView(evt); });
        };
        Menu.prototype.changeView = function (evt) {
            console.log("do something");
        };
        return Menu;
    })();
    web.Menu = Menu;
})(web || (web = {}));
var menu = new web.Menu();
menu.init();

执行时,会导致“做某事”为output to the console