Javascript 在下拉列表中存储选项值时,是否可以显示选项文本?

Javascript 在下拉列表中存储选项值时,是否可以显示选项文本?,javascript,knockout.js,Javascript,Knockout.js,这是我当前的代码 var模型=函数(){ this.nameSomething=ko.可观察(“”); this.nameId=ko.observable(0); }; var vm=(函数(){ var myList=[{id:1,类型:'foo1'},{id:2,类型:'foo2'},{id:3,类型:'foo3'}], selectedModel=ko.可观察(模型); 返回{ myList:myList, selectedModel:selectedModel }; }()); ko.

这是我当前的代码

var模型=函数(){
this.nameSomething=ko.可观察(“”);
this.nameId=ko.observable(0);
};
var vm=(函数(){
var myList=[{id:1,类型:'foo1'},{id:2,类型:'foo2'},{id:3,类型:'foo3'}],
selectedModel=ko.可观察(模型);
返回{
myList:myList,
selectedModel:selectedModel
};
}());
ko.应用绑定(vm)


显示此项:
存储此项:

这是直接不可能的。至少有三种可能的方法:

  • 使用在数组中按键查找值的computed(可以是pureComputed)
  • 创建一个可观察对象,并向更新该可观察对象的
    nameId
    订阅一个函数
  • 您可以使用绑定和订阅,也可以从绑定
    observableArray
    中当前选择的选项获取值,但这只是另一种选择

    这是针对您的问题的解决方案,您可以使用第一个选项在viewmodel中使用该结构

    var vm2=(函数(){
    var list=ko.observableArray(
    [{id:1,键入:'foo1'},
    {id:2,键入:'foo2'},
    {id:3,键入:'foo3'}]
    );
    var selectedId=ko.observable();
    var selectedType=ko.pureComputed(函数(){
    return list().find(函数(l){return l.id==selectedId();}).type;
    });
    返回{
    列表:列表,
    selectedId:selectedId,
    selectedType:selectedType
    };
    })();
    ko.应用绑定(vm2)
    
    
    
    显示此项:
    存储此项:

    这是直接不可能的。至少有三种可能的方法:

  • 使用在数组中按键查找值的computed(可以是pureComputed)
  • 创建一个可观察对象,并向更新该可观察对象的
    nameId
    订阅一个函数
  • 您可以使用绑定和订阅,也可以从绑定
    observableArray
    中当前选择的选项获取值,但这只是另一种选择

    这是针对您的问题的解决方案,您可以使用第一个选项在viewmodel中使用该结构

    var vm2=(函数(){
    var list=ko.observableArray(
    [{id:1,键入:'foo1'},
    {id:2,键入:'foo2'},
    {id:3,键入:'foo3'}]
    );
    var selectedId=ko.observable();
    var selectedType=ko.pureComputed(函数(){
    return list().find(函数(l){return l.id==selectedId();}).type;
    });
    返回{
    列表:列表,
    selectedId:selectedId,
    selectedType:selectedType
    };
    })();
    ko.应用绑定(vm2)
    
    
    
    显示此项:
    存储此项:

    解决方案是使用整个对象作为“选定值”。然后,您可以轻松地将“显示”的内容与“存储”的内容区分开来

    var defaultItem={
    id:1,
    类型:“foo1”,
    };
    var vm=(函数(){
    var myList=[{id:1,类型:'foo1'},{id:2,类型:'foo2'},{id:3,类型:'foo3'}],
    selectedModel=ko.可观察(默认项);
    返回{
    myList:myList,
    selectedModel:selectedModel
    };
    }());
    ko.应用绑定(vm)
    
    
    
    显示此项:
    存储此项:

    解决方案是使用整个对象作为“选定值”。然后,您可以轻松地将“显示”的内容与“存储”的内容区分开来

    var defaultItem={
    id:1,
    类型:“foo1”,
    };
    var vm=(函数(){
    var myList=[{id:1,类型:'foo1'},{id:2,类型:'foo2'},{id:3,类型:'foo3'}],
    selectedModel=ko.可观察(默认项);
    返回{
    myList:myList,
    selectedModel:selectedModel
    };
    }());
    ko.应用绑定(vm)
    
    
    
    显示此项:
    存储此项:

    您可以选择不识别选项值,这会将所选值设置为完整对象,您可以随心所欲。。。包括所有可用的财产(如果我没有弄错你的问题)

    
    
    显示此项:
    存储此项:

    在这里查看我的小提琴

    您可以选择不识别选项值,这会将所选值设置为完整对象,您可以随心所欲。。。包括所有可用的财产(如果我没有弄错你的问题)

    
    
    显示此项:
    存储此项:

    在这里查看我的小提琴

    我也在考虑使用computed/pureComputed,但列表来自数据库,我不确定如何执行。你认为你可以展示#1和#2的例子吗?你可以提供代码例子吗?对于reference@BoyPasmo我已经包括了一个样品。第二个sholud be obviousI也在考虑使用computed/pureComputed,但是这个列表来自数据库,我不知道如何做。你认为你可以展示#1和#2的例子吗?你可以提供代码例子吗?对于reference@BoyPasmo我已经包括了一个样品。第二个问题显然是一个很好的解决方案。我不知道!!我懂了。我认为“价值”的价值与“期权价值”相同。是吗?
    选项value
    是一个可选键/函数,您可以使用它来确定选择该选项时“所选值”应该是什么。默认情况下,您的“选定值”将是选中列表中的对象。此行为记录在此处。很好的解决方案。我不知道!!我懂了。我认为“价值”的价值与“期权价值”相同。是吗?
    选项value
    是一个可选键/函数,您可以使用它来确定选择该选项时“所选值”应该是什么。默认情况下,您的“选定值”为w
    <div data-bind="with: selectedModel">
        <select data-bind="options: $root.myList,
                           optionsText: 'type',
                           value: nameSomething"></select><br />
            Display this: <span data-bind="text: nameSomething().id"><br />
        Store this: <span data-bind="text: nameSomething().nameId"><br /> <!-- not displaying anything -->
        <pre data-bind="text: ko.toJSON($root.selectedModel, null, 2)"></pre>
    </div>