您可以将 JavaScript 对象作为关联数组访问,使用您的字段名称作为键(例如object.foo
,可以表示为object['foo']
)。然后,当您指向一个可观察对象时,您将其作为函数调用以获取/设置值。
假设您有这样的绑定:
data-bind="DefaultOrCustom: 'firstName'"
您可以像这样访问 observable:
ko.bindingHandlers.DefaultOrCustom = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = valueAccessor(), allBindings = allBindingsAccessor();
var oldValue = viewModel[value](); // read from the observable
viewModel[value]('New Value'); // write to the observable
}
通过检查字段的类型,您可以变得更加灵活。如果它是“函数”,则将其视为可观察的 - 使用 () 形式,否则将其视为常规字段。
ko.bindingHandlers.DefaultOrCustom = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = valueAccessor(), allBindings = allBindingsAccessor();
var oldValue;
if (typeof(viewModel[value]) == 'function') {
oldValue = viewModel[value](); // read from the observable
viewModel[value]('New Value'); // write to the observable
} else {
oldValue = viewModel[value]; // read from the field
viewModel[value] = 'New Value'; // write to the field
}
}
仅供参考:typeof
实际上不是一个函数,但我经常发现使用这种形式可以让我更清楚地输入什么。