如果我想获得一个可观察值,我通常将其称为函数。
说,我有一个具有以下可观察对象的模型
export interface ClientModel {
name: KnockoutObservable<string>;
age: KnockoutObservable<number>;
}
还有一个如下所示不可观察的模型
export interface ServerModel {
name: string;
age: number;
}
下面是从一种模型转换为另一种模型的两种实现。
A
export function getServerModelJson(person: ClientModel) : ServerModel {
const personJson: ServerModel = {
name: ko.unwrap(person.name),
age: ko.unwrap(person.age)
}
return personJson;
}
B
export function getServerModelJson(person: ClientModel) : ServerModel {
const personJson: ServerModel = {
name: person.name(),
age: perosn.age()
}
return personJson;
}
两者之间是否有区别(将observable称为函数与使用ko.unwrap进行调用)。推荐的方法是什么?如果字段是复杂类型,将会发生什么变化。在这种情况下,如何进行转换?
答案 0 :(得分:2)
两者之间有区别吗(将observable称为函数与使用
ko.unwrap
)。
两个:
如果直接将VM属性作为函数调用,则它必须是一个函数(例如,可观察的对象或其他)。如果这是一个简单的非功能数据属性,则会出现错误。使用ko.unwrap
,在这种情况下,它可以为您提供简单的非功能数据属性的值(或者,当然是可观察值的值)。
ko.unwrap
添加了一个函数调用和一些检查(对ko.unwrap
的调用以及它所做的工作来确定您通过的内容是否令人讨厌)。
如果您知道,这是可以观察到的,例如您的示例,则没有使用ko.unwap
的真正理由。 (如果您知道,这是不可观察的,同样也没有使用ko.unwrap
的真实理由。)
推荐的方法是什么?
取决于您的属性是什么,以及是否知道它们是可观察的,取决于您。
如果字段是复杂类型,将会发生什么变化。在这种情况下,如何进行转换?
什么也没有,您只是以相同的方式进行操作—请注意,如果复杂类型的属性也是可观察的,则必须分别处理它们(ko.unwrap
并不深入)。