我有一个如下模型:
function Foo() {
var self = this;
self.options = [{id: 1, text: "lorem"}, {id: 2, text: "ipsum"}];
self.selectedValue = ko.observable(initialValue);
self.selectedObject = ko.computed(function () {
return ko.utils.arrayFilter(self.fields, function (f) {
return f.id == self.selectedValue();
})[0];
});
}
当然,这与 a 绑定select
:
<select data-bind="options: options,
optionsText: 'text',
optionsValue: 'id',
value: selectedValue">
hack 是因为我有另一个绑定(在不同的ko.computed
对象中,未显示)需要访问完整的对象,而值需要是一个普通的 Id,所以它可以提交(我使用的是标准form
,而不是自定义调用)
我想摆脱黑客(我正在其他几个地方这样做)。理想情况下,我会在我的模型中定义一个selected
属性,该属性将具有对象,但select
提交时该值是正确的。
它也必须以两种方式工作:我可能有一个初始值可供选择。
这是可行的吗?我应该研究自定义绑定吗?它已经存在了吗?
我可以反过来做(即就像我现在做的那样),但我希望它更干净。我想我可以只写一个lookup(array, property, value)
助手,但也许有更好的方法。