Knockout Typescript传递没有包装器的对象

时间:2016-03-04 12:26:08

标签: knockout.js typescript components

我有一个自定义组件,它将对象传递给该组件的viewmodel。这是使用打字稿。该对象到达构造函数,但它被knockout包装在一个匿名对象中。

有没有办法防止这种情况,只是获取强类型值对象?

在构造函数中,我得到了这个:

我想立即获得价值/订单。

这是我的代码:

的index.html:

 Object { value: Order, $raw: Object }

component.html:

<div data-bind="foreach: Orders"/>
     <my-component params="value: $data"></my-component>
</div>

component.ts

 <span data-bind="text: Name"></span>

Component.ts:

ko.components.register('my-component', {
     viewModel: ComponentVm,
     template: component.html"
});

Order.ts:

class ComponentVm{
     public Name:string;

     constructor(order:Order){
          this.Name = order.Name; //Problem here because of anonymous object
     }
}

一种解决方案是:

Class Order {
      public Name:string = "Bob";
      constructor(){}
}

但那不是很好。

2 个答案:

答案 0 :(得分:4)

您可以在“Component.ts”中指定“params”对象类型:

class ComponentVm {
     public Name:string;

     constructor(params: { order: Order }){
          this.Name = params.order.Name;
     }
}

答案 1 :(得分:0)

很确定简短的回答是&#34;没有&#34;。 Components receive a params argument。但这并不意味着您必须使用any类型。您的params对象应该是明确定义的。

  

params - 将传递给组件的对象。   通常,这是一个包含多个参数的键值对象,   并且通常由组件的viewmodel构造函数接收。