gpt4 book ai didi

knockout.js - 选项文本用fromJS更新后变成函数字符串

转载 作者:行者123 更新时间:2023-12-04 05:53:45 25 4
gpt4 key购买 nike

为什么从 ko.mapping.fromJS 更新值后,选项文本会转换为函数字符串?

样本:
http://jsfiddle.net/tYnc6/24/

网址:

<div>
<select data-bind="options: items, value: selected, optionsText: function(item) { return ('[' + item.Id + '] ' + item.Name) }, optionsCaption: 'Choose...'"></select>
<button data-bind="click: update">Update</button>
</div>

Javascript:
var mapping = {
key: function(data) {
return ko.utils.unwrapObservable(data.Id);
}
};

viewModel = {
items: ko.observableArray([
{Name: 'foo', Id: '1'},
{Name: 'bar', Id: '2'}
]),
selected: ko.observable(),

update: function() {
data = [
{Name: 'foo', Id: '1'},
{Name: 'bar', Id: '2'},
{Name: 'baz', Id: '3'}
];
ko.mapping.fromJS(data, mapping, this.items);
}
}
ko.applyBindings(viewModel);

请注意,按下更新后,选项文本变成了一个函数。

最佳答案

已经通过映射插件传递的数据现在变成了NameId变成可观察的。因此,当您的函数执行时 '[' + item.Id + '] ' + item.Name ,您正在将字符串与可观察对象(函数)连接起来。

如果NameId总是可观察的,那么你会想要做:
'[' + item.Id() + '] ' + item.Name()
如果您想支持 observables 或 non-observables,那么您可以执行以下操作:
'[' + ko.utils.unwrapObservable(item.Id) + '] ' + ko.utils.unwrapObservable(item.Name)ko.utils.unwrapObservable将正确返回可观察或不可观察的值。

关于knockout.js - 选项文本用fromJS更新后变成函数字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com