淘汰赛observableArray在打字稿(Knockout observableArray in

2019-08-02 04:26发布

什么是一个打字稿类初始化淘汰赛observableArray的正确方法?

我做这样的事情:

   module ViewModel { 

        declare var ko;

        export class IndexPageViewModel {       

                agencies: any;                   

                constructor () {               
                    this.agencies = ko.observableArray([]);              
                }                                                                                                   
        }
    }


var ivm = new ViewModel.IndexPageViewModel();
ivm.agencies.push({name: "name", alias : "alias"});
for (var i = 0; i < ivm.agencies.length; i++){
    alert(ivm.agencies[i].name);
 }

看起来很简单,但是当我试图访问的机构性质所指示的,执行挂起。 我错过了什么?

Answer 1:

这条线是你的错误是:

agencies[i]

当你访问一个可观察的阵列,它实际上是包裹在一个函数,所以你访问它喜欢:

agencies()[i]

另外,请你帮个忙,并从下载淘汰赛定义: https://github.com/borisyankov/DefinitelyTyped

然后用类型声明你的属性:

module ViewModel {

    export class IndexPageViewModel {

        agencies: KnockoutObservableArray;

        constructor () {
            this.agencies = ko.observableArray([]);
        }
    }
}


Answer 2:

我只是在打字稿1.3(不过,在老版本的工作太)这样做:

pendingAddAssociations: KnockoutObservableArray<ControllerModel> = ko.observableArray<ControllerModel>([]);

为你的例子,如果你有一个局级。

export class IndexPageViewModel {

        agencies: KnockoutObservableArray<Agency>;

        constructor () {
            this.agencies = ko.observableArray<Agency>([]);
        }
    }

我还发现可以投射到任何this.agencies = <any>[]; 如果您使用的是这是有用的淘汰赛ES5插件 。



文章来源: Knockout observableArray in TypeScript