如何从Knockoutjs中排除某些属性toJS()

Mik*_*sen 16 javascript knockout-mapping-plugin knockout.js

我有以下型号:

var model = {
   A: 'One',
   B: 'Two',
   C: 'Three'
};
Run Code Online (Sandbox Code Playgroud)

我将各种UI元素绑定到这些字段,效果很好.但是,我将模型转换回JavaScript对象,以便我可以保存对服务器的任何更改:

var goingToServer = ko.toJS(model);
Run Code Online (Sandbox Code Playgroud)

goingToServer将包括属性A,B和C.但是,假设属性C是一个永远不会改变的大量数据.我想避免将其发送回服务器.

有没有办法在将模型转换回JavaScript对象时toJS() 包含一组预定义的字段?

我一直在研究的一件事是Knockout Mapping插件.它有一个名为include的设置,记录如下:

将视图模型转换回JS对象时,默认情况下,映射插件仅包含属于原始视图模型的属性,除非它还包含Knockout生成的_destroy属性,即使它不是原始对象的一部分.但是,您可以选择自定义此数组:

但是,看起来这个插件不能像记录的那样工作,因为它ko.mapping.toJS()仍然包括A,B和C,即使我传入了一个include数组['A', 'B'].我猜这个功能旨在包括原始模型中没有的其他字段.

有没有办法在将模型转换回JavaScript对象时排除某些属性,而不是做一些hacky,例如生成对象并在发送到服务器之前手动删除我不想要的属性?

Pau*_*tti 25

你试过ignore关键字吗?它与include包含的用法类似:

var mapping = {
    'ignore': ["propertyToIgnore", "alsoIgnoreThis"]
}
var viewModel = ko.mapping.toJS(data, mapping);
Run Code Online (Sandbox Code Playgroud)

您可以在执行服务器数据的原始映射时使用ignore,然后在将其转换回JS时,它将不会在您的对象上.

  • 是的,文档集中在fromJS方法上,这就是为什么我求助于查看源代码! (4认同)