Select 如何从knockout.js Observarray中获取所选菜单选项?

Select 如何从knockout.js Observarray中获取所选菜单选项?,select,drop-down-menu,knockout.js,option,Select,Drop Down Menu,Knockout.js,Option,我觉得我缺少了一些非常基本的东西,但是我无法像我期望的那样使用Knockout.js来获得一个下拉菜单 我想在菜单中显示一组对象,我需要找到所选选项并将其发布到服务器。我可以获取要渲染的菜单,但似乎无法获取所选项目的值。我的视图模型如下所示: function ProjectFilterItem( name, id ) { this.Name = name; this.Id = id; } function FilterViewModel() { this.proj

我觉得我缺少了一些非常基本的东西,但是我无法像我期望的那样使用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>
我的视图标记如下所示:

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>

选定项目:

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

您只需使用绑定所选值:

从:

注意:对于多选列表,要设置以下选项: 选中,或要读取已选中的选项,请使用 选择选项绑定。对于单个选择列表,您还可以阅读 并使用值绑定写入所选选项

在您的示例中:

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


看。

d'oh!我在文档中忽略了这一点——我正专注于底部的“参数”部分,并阅读了顶部的注释。谢谢,问题解决了!谢谢你的演示,它帮助了我很多!