Knockout.js 使用fromJS更新后,选项文本成为函数字符串
为什么从ko.mapping.fromJS更新值后,选项文本会转换为函数字符串 样本: Html:Knockout.js 使用fromJS更新后,选项文本成为函数字符串,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,为什么从ko.mapping.fromJS更新值后,选项文本会转换为函数字符串 样本: Html: 请注意,在按下update之后,选项文本将变为一个函数。通过映射插件传递的数据现在已将Name和Id变为可观察数据。因此,当您的函数执行'['+item.Id+']'+item.Name时,您是在将字符串与可观察对象(即函数)连接起来 如果名称和Id始终是可观察的,则您需要执行以下操作: '['+item.Id()+']'+item.Name() 如果您想支持可观察或不可观察,那么您可以执行以下
请注意,在按下update之后,选项文本将变为一个函数。通过映射插件传递的数据现在已将
Name
和Id
变为可观察数据。因此,当您的函数执行'['+item.Id+']'+item.Name
时,您是在将字符串与可观察对象(即函数)连接起来
如果名称
和Id
始终是可观察的,则您需要执行以下操作:
'['+item.Id()+']'+item.Name()
如果您想支持可观察或不可观察,那么您可以执行以下操作:
'['+ko.utils.unwrapObservable(item.Id)+']'+ko.utils.unwrapObservable(item.Name)
ko.utils.unwrapobbservable
将正确返回可观察或不可观察的值
<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>
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);