0
我想使用knockout贴图插件,但我需要模型中的对象作为属性(主要是因为它们需要可替换)。Knockout Mapping插件 - 将对象映射到可观察对象
考虑一个大大简化例如以下模型:
{
family: {
patriarch: {
name: "Fred Flintstone", child: "Pebbles"
}
},
allPeople: [
{name: "Fred Flintstone", child: "Pebbles"},
{name: "Wilma Flintstone", child: "Pebbles"},
{name: "Barney Rubble", child: "Bam Bam"}
]
}
假设我希望能够通过选择要修改的族长在选项allPeople其中改变选择可能有许多副作用。
映射插件使得所有名称属性都是可观察的,allPeople是一个observableArray,但为了让我的选择正常工作,父系对象本身必须是可观察的。
写我自己粗略的映射器是所有13行代码,但由于映射插件是如此全面的功能,我希望有一个选项或其他方式来获得这个看似常见的场景工作。
'vm.family.patriarch'的值被设置为'allPeople'中的第一个对象。例如,如果将'data.family.patriarch.name'的值更改为“Wilma Flintstone”,则“Fred Flinstone”仍将出现在警报框中。 –
如果添加“alert(ko.toJSON(options.data))”;“到create方法中,您可以看到它默认正确数据的可见性,但显然,select的绑定并不完全正确,因为订阅触发了立即显示基础选定值已重置为第一个条目的情况。但后续更改会正确更改observable的值。我会去排序选择绑定。 –
这似乎也不适用于直接构建的视图模型,即没有使用映射插件创建的视图模型。看看这个小提琴:http://jsfiddle.net/82vsf/3/这是使用文档中的例子:http://knockoutjs.com/documentation/options-binding.html,除了它是设置一个初始值对于可观察的并且没有未被选择的选项。 –