我正在使用 ko.mapping 实用程序设置我的模型。
传入我的主要数据时,请考虑我的一个属性是一个数组。这个数组是一周中每 7 天一个对象,所以我知道这个集合不会改变也不会重新排列。我可以轻松地将这个数组生成为具有扁平属性的 JSON 对象的副本,或者作为具有观察或扁平属性的 observableArray,但我似乎无法通过映射实用程序创建一个混合了基本性质和观察性质。
我尝试了映射选项的各种排列,但看起来我仍然必须映射这个数组,而没有或只是咬住我不断的肛门冲动,让这个复杂的模型以我想要的方式准确映射我想要的方式映射它。
为了更好地显示问题:
var PrimaryViewModelMapping = {
copy: ['KeyProperty', 'ArrayOfDays'],
create: function(options) { return new PrimaryViewModel(options.data); }
}
这将在我的 PrimaryViewModel 实例中为我提供一个平面副本,而无需任何额外的努力......但如果不循环遍历 PrimaryViewModel 声明中的数组并做一些事情,就无法控制 ArrayOfDays 中的属性。
接着说:
var PrimaryViewModelMapping = {
copy: ['KeyProperty'],
observe: ['ArrayOfDays'],
create: function(options) { return new PrimaryViewModel(options.data); }
}
这将很好地将我的 ArrayOfDays 打包为一个可观察的数组,同时保持它的所有“每个”属性都是扁平的。
下一次尝试如下:
var PrimaryViewModelMapping = {
copy: ['KeyProperty'],
'ArrayOfDays': {
copy: ['Date'],
observe: ['TotalDuration'],
create: function(options) {
return new DayArrayModel(options.data);
}
}
}
这将创建一个可观察的数组,并让我完全控制观察到的内容(TotalDuration)和未观察到的内容(KeyProperty)以及在我的对象 DayArrayModel 的声明中,以及我可能想做的任何其他事情......
但是 ArrayOfDays 仍然是一个可观察的数组。我不需要,也不需要它。
了解这里的主题是特定于映射插件的,我不想在 PrimaryViewModel 声明中创建循环来处理这个......我知道我可以做到。只是想知道我是否偶然发现了“功能请求”,或者我只是没有得到它。
谢谢。