Knockout Binding 问题,只能通过匿名函数获取值
Knockout Binding issue, can only get values with anonymous functions
我有一个可观察的 CommitteeTypes,它包含一个对象数组:
self.CommitteeTypes = ko.observableArray();
self.init = function() {
self.CommitteeTypes([
{
Meeting: {descr: 'Committee', meeting_type_id: 'C' },
Ranks: [{}, {}, ...],
Roles: [{}, {}, ...]
}
]);
}
然后我有一个 Select 下拉菜单:
<select data-bind="options: $root.CommitteeTypes, optionsText: function(item) { return item.Meeting.descr; }, optionsValue: Meeting.comm_meeting_type, optionsCaption: 'Select...'"></select>
OptionsText 绑定有效,returns "Committee" 符合预期,但 OptionsValue 绑定无效,它会抛出错误:"Reference Error: Meeting is not defined",如果我将其括在引号中将值留空。
传入的对象是我所期望的,因为我可以通过 lambda 访问它,但如果没有它,这是行不通的。我错过了什么?我在另一个页面上有几乎完全相同的绑定(减去 lambda)。但是我似乎无法弄清楚我在这里做错了什么。
如果您在 optionsValue
绑定中将 "Meeting.meeting_type_id"
与引号一起使用,它将查找确切的 属性: committeeObject["Meeting.meeting_type_id"]
而不是嵌套值,因为 knockout 不会不知道。
因此,您可以使用类似于 optionsText
绑定的功能来延迟对 属性
的访问
function viewModel() {
const self = this;
self.CommitteeTypes = ko.observableArray([{
Meeting: {
descr: 'Committee',
meeting_type_id: 'C'
}
},
{
Meeting: {
descr: 'Committee 2',
meeting_type_id: 'D'
}
}
]);
self.selectedValue = ko.observable()
self.selectedValue.subscribe(console.log)
}
ko.applyBindings(new viewModel)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<select data-bind="options: CommitteeTypes,
optionsText: i => i.Meeting.descr,
optionsValue: i => i.Meeting.meeting_type_id,
value: selectedValue,
optionsCaption: 'Select...'">
</select>
我有一个可观察的 CommitteeTypes,它包含一个对象数组:
self.CommitteeTypes = ko.observableArray();
self.init = function() {
self.CommitteeTypes([
{
Meeting: {descr: 'Committee', meeting_type_id: 'C' },
Ranks: [{}, {}, ...],
Roles: [{}, {}, ...]
}
]);
}
然后我有一个 Select 下拉菜单:
<select data-bind="options: $root.CommitteeTypes, optionsText: function(item) { return item.Meeting.descr; }, optionsValue: Meeting.comm_meeting_type, optionsCaption: 'Select...'"></select>
OptionsText 绑定有效,returns "Committee" 符合预期,但 OptionsValue 绑定无效,它会抛出错误:"Reference Error: Meeting is not defined",如果我将其括在引号中将值留空。
传入的对象是我所期望的,因为我可以通过 lambda 访问它,但如果没有它,这是行不通的。我错过了什么?我在另一个页面上有几乎完全相同的绑定(减去 lambda)。但是我似乎无法弄清楚我在这里做错了什么。
如果您在 optionsValue
绑定中将 "Meeting.meeting_type_id"
与引号一起使用,它将查找确切的 属性: committeeObject["Meeting.meeting_type_id"]
而不是嵌套值,因为 knockout 不会不知道。
因此,您可以使用类似于 optionsText
绑定的功能来延迟对 属性
function viewModel() {
const self = this;
self.CommitteeTypes = ko.observableArray([{
Meeting: {
descr: 'Committee',
meeting_type_id: 'C'
}
},
{
Meeting: {
descr: 'Committee 2',
meeting_type_id: 'D'
}
}
]);
self.selectedValue = ko.observable()
self.selectedValue.subscribe(console.log)
}
ko.applyBindings(new viewModel)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<select data-bind="options: CommitteeTypes,
optionsText: i => i.Meeting.descr,
optionsValue: i => i.Meeting.meeting_type_id,
value: selectedValue,
optionsCaption: 'Select...'">
</select>