我有一个绑定到select
HTML元素的对象数组。当用户更改select
元素上的选项时,我可以将值绑定到KnockoutJS视图模型。但是,我需要将此值映射回原始JavaScript对象(因为我需要访问其他属性来执行其他逻辑)。
我的HTML看起来像这样。
<select data-bind="options: categories,
optionsText: 'name',
optionsValue: 'id',
value: selectedCategory,
optionsCaption: 'Choose...',
event: { change: categoryChanged }
">
</select>
我的JavaScript如下所示。
var categories = [
{ "name" : "color", "id": "1" },
{ "name" : "names", "id": "2" }
];
var Category = function(data) {
this.name = ko.observable(data.name);
this.id = ko.observable(data.id);
};
var Value = function(data) {
this.name = ko.observable(data.name);
}
var ViewModel = function(categories, values) {
var self = this;
self.categories = ko.observableArray(ko.utils.arrayMap(categories, function(category) {
return new Category(category);
}));
self.selectedCategory = ko.observable();
self.categoryChanged = function(obj, event) {
//how do i map back to which category was selected?
//do i have to loop through?
};
};
var viewModel;
$(document).ready(function() {
viewModel = new ViewModel(categories);
ko.applyBindings(viewModel);
});
JSFiddle代码位于http://jsfiddle.net/jwayne2978/sx4e2f0r/。
当用户更改选择时,我可以访问通过self.selectedCategory
选择了哪个类别ID,但我现在需要将此类别ID映射回实际的Category
。我想我可以迭代self.categories
,但这似乎有点违背了KO的目的。
有没有办法将整个对象绑定到视图模型?
答案 0 :(得分:1)
您是否尝试删除optionsValue: 'id'
?然后,您将绑定到observable本身,而不仅仅是id
属性。