knockout.js 检索可观察对象的当前值

iqxoj9l9  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(146)

如果我想得到一个可观察的值,我通常把它作为一个函数调用。
比如说,我有一个模型,其可观测量如下

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)?推荐的方法是什么?如果字段是复杂类型,会有什么变化?在这些情况下,如何进行转换?

x8diyxa7

x8diyxa71#

两者之间是否有区别(将可观察值作为函数调用与使用ko.unwrap)?
第二:
1.如果你直接把VM属性作为函数调用,那么它必须是一个函数(例如,一个可观察的或其他的)。如果它是一个简单的非函数数据属性,你会得到一个错误。在ko.unwrap中,它给出了这种情况下简单的非函数数据属性的值(当然,也就是可观察的值)。

  1. ko.unwrap添加了一个函数调用和几个检查(对ko.unwrap的调用以及它所做的工作,以确定您传递给它的内容是否是可观察的)。
    如果你知道它是可观测的,就像你的例子一样,没有真实的的理由使用ko.unwap(如果你知道它是不可观测的,同样也没有真正的理由使用ko.unwrap)。
    推荐的方式是什么?
    这取决于你,取决于你的属性是什么,以及你是否知道它们是可观察的。
    如果字段是复杂类型,会发生什么变化。在这些情况下,如何进行转换?
    什么都不用做,你只要用同样的方法做就行了--注意,如果复杂类型的属性也是可观察的,你就必须单独处理它们(ko.unwrap没有深入)。

相关问题