Knockout在TypeScript中计算?

时间:2014-09-18 20:59:33

标签: javascript knockout.js typescript

概述

我只想在TypeScript中编写一个Knockout Computed函数作为原型的属性。我知道如何将函数写为原型的属性,而不是ko.computed。我知道如何将ko.computed写为对象的属性(但不是原型),但我似乎找不到交集的正确语法。

我想要什么(JS)

MyClass.prototype.myFunction = ko.computed(function(){

    // js goes here

});

我有什么(TS)

myFunction():  any {

    ko.computed(function(){

        // code

     })

}

我的TS输出(不需要)

MyClass.prototype.myFunction = function(){

    ko.computed(function(){

        // code

    })

});

TypeScript发布到原型的表达式示例

TS

class MyClass {

    name: KnockoutObservable<string>;  

    editing: KnockoutObservable<boolean>;                    

    constructor(name: string) {

        this.name = ko.observable(fullName);

        this.editing = ko.observable(false);

    }

    edit(): void {

        this.editing(true);

    }

}

JS

var MyClass = (function () {
    function MyClass(name) {
        this.name = ko.observable(fullName);

        this.editing = ko.observable(false);
    }
    MyClass.prototype.edit = function () {
        this.editing(true);
    };
    return MyClass;
})();

如果没有办法按照我描述的方式写一个ko.computed,我会觉得真的很令人费解。

3 个答案:

答案 0 :(得分:3)

您可以做的是使用可观察的owner属性来提供计算中使用的范围:

class MyViewModel {
    myFunction = () => ko.computed({
        owner: this,
        read: function() {
            // code
        }
    })
}

这为您提供以下输出:

var MyViewModel = (function () {
    function MyViewModel() {
        var _this = this;
        this.myFunction = function () {
            return ko.computed({
                owner: _this,
                read: function () {
                    // code
                }
            });
        };
    }
    return MyViewModel;
})();

答案 1 :(得分:1)

试试这个:

type

答案 2 :(得分:0)

TypeScript中没有语法发出在原型上初始化的表达式。你可以这样做:

class Foo {
    myFunction: ko.computed<string>;
}
Foo.prototype.myFunction = function() {
    return 'hello' + 'world';
}