打字稿中的Knockout Viewmodel

时间:2013-06-27 12:16:50

标签: knockout.js typescript

我们如何在typescript中声明viewmodels?

作为类,模块还是作为var / functions?

在绝对形式的例子中,他们主要使用var和函数https://github.com/borisyankov/DefinitelyTyped/blob/master/knockout/tests/knockout-tests.ts

编辑:谢谢Basarat - 在这个编辑中我扩展了问题: 如果我使用课程,我想它应该是这样的:

class Player
{
    min:KnockoutObservable<number>;
    constructor(min:number=0)
    {
        this.min=ko.observable(min);
    }
}

但是应该如何定义计算?

2 个答案:

答案 0 :(得分:5)

你可以使用with generics(最新的Typescript 0.9),只需在声明中定义类型,在构造函数中你可以为调用ko.computed的结果赋值:

export class Inbox extends vm.BriskIdeaViewModel {

    public rapidEntryText = ko.observable<string>();
    public todosActive: KnockoutComputed<Array<ITodo>>;

    constructor() {
        super();
        this.todosActive = ko.computed(() => {
            return _.filter(this.dataContext.todos(), x => !x.isDone());
        });
    }
}

答案 1 :(得分:3)

我更喜欢使用类,因为它们确实非常好地封装了功能。

e.g。一个简单的课程:

class Player {
    min = ko.observable(0);
    sec = ko.observable(0);
    mil = ko.observable(0);
}

然后做一个简单的申请:

    var vm = new Player();
    ko.applyBindings(vm);