我只想在TypeScript中编写一个Knockout Computed函数作为原型的属性。我知道如何将函数写为原型的属性,而不是ko.computed
。我知道如何将ko.computed
写为对象的属性(但不是原型),但我似乎找不到交集的正确语法。
MyClass.prototype.myFunction = ko.computed(function(){
// js goes here
});
myFunction(): any {
ko.computed(function(){
// code
})
}
MyClass.prototype.myFunction = function(){
ko.computed(function(){
// code
})
});
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,我会觉得真的很令人费解。
答案 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';
}