javascript - 我如何知道在选择框中选择了哪个对象,或者是否可以将对象绑定(bind)到 KnockoutJS View 模型?

标签 javascript mvvm knockout.js

我有一个已绑定(bind)到 select HTML 元素的对象数组。当用户更改 select 元素上的选项时,我可以将该值绑定(bind)到 KnockoutJS View 模型。但是,我需要将此值映射回原始 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 的目的。

有什么方法可以将整个对象绑定(bind)到 View 模型吗?

最佳答案

您是否尝试过删除 optionsValue: 'id'?然后,您将绑定(bind)到可观察对象本身,而不仅仅是 id 属性。

关于javascript - 我如何知道在选择框中选择了哪个对象,或者是否可以将对象绑定(bind)到 KnockoutJS View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333013/

相关文章:

javascript - JQuery:检测何时加载元素和所有子项

javascript - 是否有任何非 eval 方法来创建具有运行时确定名称的函数?

c# - MVVM 了解基础知识

javascript - Knockout.js 在不同上下文中注册多个组件

javascript - Knockout.js 2.0.0 - 在此示例中如何设置 bool 值?

javascript - 通过两个不相关的 observableArray 对象构建一个 HTML 表格

javascript - 检查链接函数中隔离范围变量的值 - Angular Directive(指令)

javascript - 为什么我的 AJAX post 请求不起作用?

c# - 回调第二次不起作用

c# - wpf mvvm绑定(bind)时间跨度,只显示分钟:seconds?