如果我想得到一个可观察的值,我通常把它作为一个函数调用。
比如说,我有一个模型,其可观测量如下
export interface ClientModel {
name: KnockoutObservable<string>;
age: KnockoutObservable<number>;
}
而一个没有可观测性的模型如下
export interface ServerModel {
name: string;
age: number;
}
下面是从一个模型转换到另一个模型的两个实现。
一个
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 as函数和使用ko.unwrap)?推荐的方法是什么?如果字段是复杂类型,会有什么变化?在这些情况下,如何进行转换?
1条答案
按热度按时间x8diyxa71#
两者之间是否有区别(将可观察值作为函数调用与使用
ko.unwrap
)?第二:
1.如果你直接把VM属性作为函数调用,那么它必须是一个函数(例如,一个可观察的或其他的)。如果它是一个简单的非函数数据属性,你会得到一个错误。在
ko.unwrap
中,它给出了这种情况下简单的非函数数据属性的值(当然,也就是可观察的值)。ko.unwrap
添加了一个函数调用和几个检查(对ko.unwrap
的调用以及它所做的工作,以确定您传递给它的内容是否是可观察的)。如果你知道它是可观测的,就像你的例子一样,没有真实的的理由使用
ko.unwap
(如果你知道它是不可观测的,同样也没有真正的理由使用ko.unwrap
)。推荐的方式是什么?
这取决于你,取决于你的属性是什么,以及你是否知道它们是可观察的。
如果字段是复杂类型,会发生什么变化。在这些情况下,如何进行转换?
什么都不用做,你只要用同样的方法做就行了--注意,如果复杂类型的属性也是可观察的,你就必须单独处理它们(
ko.unwrap
没有深入)。