如何从 knockout.js observableArray 中获取选定的菜单选项?

2024-02-11

我觉得我错过了一些非常基本的东西,但我无法使用 Knockout.js 使下拉菜单按照我的预期工作。

我想在菜单中显示一组对象,我需要找到选定的选项并将其发布到服务器。我可以渲染菜单,但似乎无法获取所选项目的值。我的视图模型如下所示:

function ProjectFilterItem( name, id ) {
    this.Name = name;
    this.Id   = id;
}

function FilterViewModel() {
    this.projectFilters = ko.observableArray([
        new ProjectFilterItem( "foo", "1" ),
        new ProjectFilterItem( "bar", "2" ),
        new ProjectFilterItem( "baz", "3" )
    ]);
    this.selectedProject = ko.observable();
}

ko.applyBindings( new FilterViewModel() );

我的视图标记如下所示:

<select 
    id        = "projectMenu"   
    name      = "projectMenu"
    data-bind = "
        options:        projectFilters,
        optionsText:    'Name', /* I have to enquote the value or I get a JS error */
        optionsValue:   'Id',   /* If I put 'selectedProject here, nothing is echoed in the span below */
        optionsCaption: '-- Select Project --'
    "
></select>

<b>Selected Project:</b> <span data-bind="text: selectedProject"></span>

如何让选定的菜单项显示在跨度中,并发布到服务器? (我假设我在跨度中渲染的可观察值与我发布的相同。)我是否需要另一个属性ProjectFilterItem, like this.selected = ko.observable(false);?如果是这样,我如何将其声明为值的目标?


你只需要使用value binding http://knockoutjs.com/documentation/value-binding.html绑定所选值:

来自options文档 http://knockoutjs.com/documentation/options-binding.html:

注意:对于多选列表,要设置哪些选项是 已选择,或要读取选择了哪些选项,请使用selectedOptions 绑定。对于单选列表,您还可以阅读 并使用值绑定.

在你的例子中:

<select 
    id        = "projectMenu"   
    name      = "projectMenu"
    data-bind = "
        value: selectedProject,
        options:        projectFilters,
        optionsText:    'Name',
        optionsValue:   'Id',
        optionsCaption: '-- Select Project --'
    "
></select>

See Demo http://jsfiddle.net/AZ9Cn/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 knockout.js observableArray 中获取选定的菜单选项? 的相关文章