如何使用 Knockout Mapping 将一个属性映射到另一个属性?

Posted

技术标签:

【中文标题】如何使用 Knockout Mapping 将一个属性映射到另一个属性?【英文标题】:How to map one property to another with Knockout Mapping? 【发布时间】:2012-03-05 00:19:39 【问题描述】:

我将模型定义为

public class Model

    public string Name  get; set;

和 JS 中的 ViewModel 作为

var vm = 
   name : ko.observable()

另外,我有回调应该更新视图模型:

function callback(data)

   ko.mapping.fromJS(data, , viewModel);

但是对于 ko.mapping 插件属性 'name' 不等于 'Name'。

如何定义从 'Name' 到 'name' 的映射?

【问题讨论】:

【参考方案1】:

首先,您不需要在 viewModel 中指定 name 属性,因为映射插件会为您添加它。

对于大小写,将您的序列化约定更改为小写属性。

或者,你可以做我所做的并在你的视图模型中接受大写。尽管它与常见的 javascript 约定不太吻合,但我已经接受它作为“来自服务器的属性”。

我发现知道哪些是从映射中创建的以及哪些用于视图模型事物非常方便。当然,您不会在视图模型中看到服务器生成/映射的属性,但它们会在那里。

我使用它在服务器上指定和创建服务器端视图模型,将它们序列化并将它们映射到我的淘汰模型。这样我就可以只专注于淘汰视图模型中的行为。

如果您需要将任何服务器端对象转换为 javascript“对象”,您可以在映射对象中实现该转换,就像我做的 here

【讨论】:

好的,我明白了。但是,我可以通过添加 JSON 序列化程序的属性来指定根据客户端的命名约定序列化我的服务器端属性吗?

以上是关于如何使用 Knockout Mapping 将一个属性映射到另一个属性?的主要内容,如果未能解决你的问题,请参考以下文章

Knockout.js ko.mapping.toJS 在我看来没有刷新数据

Knockout JS - 在没有 ko.mapping 的情况下观察数组的任何属性中的突变

更新 knockout.js 和 SignalR 库后,knockout-mapping js 不会更新视图中的列表

Knockout基本绑定数据

ko.mapping ||无法读取未定义的属性“fromJS”

Knockout.js 映射忽略