Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 在Typescript中删除Viewmodel_Knockout.js_Typescript - Fatal编程技术网

Knockout.js 在Typescript中删除Viewmodel

Knockout.js 在Typescript中删除Viewmodel,knockout.js,typescript,Knockout.js,Typescript,我们应该如何在typescript中声明viewmodels 作为类、模块还是作为变量/函数 在definitelytyped示例中,它们主要使用var和function 编辑:谢谢Basarat-在此编辑中,我扩展了问题: 如果我使用class,我想应该是这样的: class Player { min:KnockoutObservable<number>; constructor(min:number=0) { this.min=ko.obs

我们应该如何在typescript中声明viewmodels

作为类、模块还是作为变量/函数

在definitelytyped示例中,它们主要使用var和function

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

class Player
{
    min:KnockoutObservable<number>;
    constructor(min:number=0)
    {
        this.min=ko.observable(min);
    }
}
职业玩家
{
min:可观察到的敲除;
构造函数(最小:编号=0)
{
该最小值=可观察的最大值(最小值);
}
}

但是应该如何定义computed呢?

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

e、 g.一个简单的类:

class Player {
    min = ko.observable(0);
    sec = ko.observable(0);
    mil = ko.observable(0);
}
然后执行一个简单的应用程序:

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

您可以使用computed with泛型(最新的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());
        });
    }
}
导出类收件箱扩展了vm.BriskIdeaViewModel{
public-rapidEntryText=ko.observable();
public-todosActive:KnockoutComputed;
构造函数(){
超级();
this.todosActive=ko.computed(()=>{
return.filter(this.dataContext.todos(),x=>!x.isDone());
});
}
}

我一直在等待有人(而不是我:P)用泛型对ko观测值建模——它们似乎是为它量身定做的。你试过这个吗?@JcFx没有。不过,我确实做了重要的一般性工作:我非常喜欢AngularJS而不是knockout。我所知道的所有击倒现在已经一岁了:)AngularJS现在是我的第二天性:)不是要劫持你的答案,而是希望增加它的有用性,有人说:谢谢你,但它不应该是这样的:类玩家{min:knockoutobserved构造函数(min:number=0){this.min=ko.computed(min)}更正'ko.computed(min)='ko.observeable(min)'还编辑了问题以反映这一点:为什么要使用public,为什么最后使用()在rapidEntryText=ko.observable()?(我知道observable是函数,但VS强调它是一个错误)public只是个人偏好-没有public也一样(typescript默认为public,除非您将其设置为私有)。rapidEntryText=ko.observable();是要有默认值-您可以将此assignment分离到构造函数(如this.todosActive),但这要容易得多。基本上,在我的示例中,您不能对computed执行相同的操作,因为它引用“this”,在这种情况下,您不能像使用rapidEntryText一样使用字段assignment