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>