Knockout.js 获取typescript中绑定knockoutjs的正确上下文

Knockout.js 获取typescript中绑定knockoutjs的正确上下文,knockout.js,typescript,Knockout.js,Typescript,我试图使用KnockoutJS和Typescript,但在我的click bindingclickMe中遇到了一个问题,即为this(类测试)获取正确的上下文 我想出了两种方法,第一种方法是使用Test.prototype.LoadNextWinner调用Test类上的函数 module Swagolicious { export class Test { constructor() { this.WireUp();

我试图使用KnockoutJS和Typescript,但在我的click binding
clickMe
中遇到了一个问题,即为
this
(类测试)获取正确的上下文

我想出了两种方法,第一种方法是使用
Test.prototype.LoadNextWinner
调用
Test
类上的函数

 module Swagolicious {

     export class Test {

         constructor() {
             this.WireUp();
         }

         private WireUp() {
             var instance = new this.ViewModel();
             ko.applyBindings(instance);
         }

        private ViewModel = function() {
            var vm = this;
            vm.clickMe = () => {
                //This is one way to call function LoadNextWinner
                Test.prototype.LoadNextWinner(vm);
            };
         }

         private LoadNextWinner(vm) {
             console.log("clicked");
             console.log(vm);
         }
     }
 }


 $(() => {
     var test = new Swagolicious.Test();
 });
或者,第二种方法是,我可以将当前上下文
this
作为参数发送到视图模型中。e、 g.
var instance=newthis.ViewModel(this)

然而,这两种方法对我来说都有点脏,第一种方法是直接使用prototype调用函数,第二种方法(YUK)是将
this
作为上下文发送到视图模型中

我的按钮很简单:-

<button data-bind="click : clickMe">Click me</button>
点击我

我尝试了所有不同的方法来获取
TEST
的类上下文,但到目前为止都失败了。我还有什么其他选项?

问题是您正在将knockout绑定到ViewModel的实例,但是clickMe回调需要访问测试类的实例。这就是您需要提供实例以便可以在闭包中访问它的原因。为什么要使用嵌套的ViewModel类,而不是将clickMe直接放在测试类上(仍然使用Arrow函数,“this”类型脚本上下文将是测试类的实例)并应用程序绑定测试实例?原因很简单,就是click函数正在做很多事情,并与其他操作共享功能。保持干燥是我的主要原因。关于方法,你更喜欢哪种方法?
<button data-bind="click : clickMe">Click me</button>