打字稿:如何创建' lambda函数调用'外部方法?

时间:2014-04-18 03:23:50

标签: javascript html knockout.js lambda typescript

问题

我正在学习Typescript,并且刚刚学会了lambda函数用于(编辑)设置this的值。但是,我不确定如何将我的视图模型this传递给调用另一个我尚未定义的方法的函数。就我而言,我试图调用Knockout方法。见例:

所需的JavaScript:

var MyViewModel = (function () {
    function MyViewModel() {
        var _this = this;
        ...
        this.someMethod = function () {
            ko.utils.arrayForEach(this.array1(), function (item) {
                while (item.array2().length < _this.array3.length) {
                    item.array2.push(12345);
                }
            });
        };
  ...

实际JavaScript:

var MyViewModel = (function () {
    function MyViewModel() {
        var _this = this;
        ...
        this.someMethod = function () {
            ko.utils.arrayForEach(_this.array1(), function (item) {
                while (item.array2().length < this.array3.length) {
                    item.array2.push(12345);
                }
            });
        };
  ...    

打字稿:

method = () => {
    ko.utils.arrayForEach(this.array1(), function(item){
        while(item.array2().length < this.array3().length){
            item.array2.push(0);
        }
    })
 }

一种解决方案......

我使用过的一个解决方案是手动将this.array3().length设置为_this.array3.length(),但这很糟糕,我不喜欢它。

我应该如何将正确的this传递给我的内心功能?

1 个答案:

答案 0 :(得分:3)

您需要使用另一个lambda来继续this

method = () => {
    ko.utils.arrayForEach(this.array1(), (item) => {  // NOTE here
        while(item.array2().length < this.array3().length){
            item.array2.push(0);
        }
    })
 }

TypeScript中的this提示:https://www.youtube.com/watch?v=tvocUcbCupA&hd=1