19

我是打字稿的新手,想将它与淘汰赛的优点结合起来。我有一个计算出的 observable,目前可以工作,但想知道这是正确的方法还是有更好的方法。

我正在使用来自 nu-get 的淘汰赛定义文件。其中有 4 个 KnockoutComputed(x) 定义。

  1. 淘汰赛计算
  2. 淘汰赛计算定义
  3. 淘汰赛ComputedFunctions
  4. 淘汰赛ComputedStatic

我喜欢声明 observable 的 {} 方法,并希望保留它。长话短说,这是声明 observables 的正确方法还是有另一种方法(可能在函数中使用 intlisense)

我正在使用第一个这样的:

class PersonViewModel {
    public firstname: KnockoutObservable<string>;
    public lastname: KnockoutObservable<string>;
    public fullname: KnockoutComputed<string>;
    constructor() {
        this.firstname = ko.observable('');
        this.lastname = ko.observable('');
        this.fullname = ko.computed({
            owner: this,
            read: function () {
                return this.firstname() + " " + this.lastname();
            }
        });
    }
}

带有以下html片段:

<h2>Type Script and Knockout.</h2>
<input data-bind="value: firstname" />
<input data-bind="value: lastname" />
<div data-bind="text: fullname"></div>
4

1 回答 1

39

建议使用箭头函数进行计算。它还将为您提供所需的智能:

this.fullname = ko.computed({
        owner: this,
        read:  () => {
            return this.firstname() + " " + this.lastname();
        }
    });

基本上,this使用闭包捕获,所以谁回调函数并不重要。this将继续表示PersonViewModel而不是any。更多:http ://basarat.github.io/TypeScriptDeepDive/#/this

在TypeScript Playground中尝试智能感知。当你按下时你应该得到智能感知this.

于 2013-05-22T05:29:18.567 回答