And*_*ton 6 knockout.js typescript
我正在使用KnockoutJS和Typescript编写单页应用程序.
问题是这个,我有一个MainViewModel方法:
public addToCase(email) {
this.addToCaseVM.setEmail(email, this.getEmailBody());
};
Run Code Online (Sandbox Code Playgroud)
我的页面中有一个电子邮件视图,其中包含一个"添加到案例"按钮,该按钮以html绑定,如下所示:
<a class="btn btn-info" data-bind="click: $root.addToCase" data-toggle="modal" href="#addToCaseModal"><i class="icon-plus-sign"></i> Add To Existing Case</a>
Run Code Online (Sandbox Code Playgroud)
$ root是我的MainViewModel.单击此按钮时,函数的"email"参数是MainViewModel中正确选择的电子邮件,但函数的范围也是EmailViewModel,而不是定义函数的MainViewModel.
我理解为什么会发生这种情况,我对如何解决Typescript中的特定问题感兴趣,因为我不能像在纯javascript中那样声明指向MainViewModel实例的指针:
var MainViewModel = (function(){
var self = this;
this.addToCase = function(email) {
self.addToCaseVM.setEmail(email, self.getEmailBody());
};
})();
Run Code Online (Sandbox Code Playgroud)
我的解决方案是声明类方法并将其保留为空,直到调用构造函数,然后定义方法体.这种方法将正确确定范围.
class MainViewModel {
addToCase: (email) => void;
constructor() {
this.addToCase = (email) => {
this.addToCaseVM.setEmail(email, this.getEmailBody());
};
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用函数文字,以便可以将父对象传递给 addToCase 函数,但这似乎是解决问题而不是解决问题。
data-bind="click: function(data) {$root.addToCase(data,$root)}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |