正在恢复knockout.js中的下拉列表

正在恢复knockout.js中的下拉列表,knockout.js,Knockout.js,知道下拉列表为什么不设置其初始值吗?初始负载表示选择。。。但我希望它说的是最底层初始JSON中提供的NCI值 理想情况下,我希望savejson不包含下拉列表中的每一项。这就是为什么我有来自不同来源的数据结构的原因。我无法通过下拉列表使用字符串重新选择正确的项目 我是不是遗漏了什么?如果是,请解释,我会更新我的答案 否则,如果你不想选择。。要成为仅显示文本的初始值,而不是值,请删除选项Caption,然后选择列表中的第一项: <select data-bind="options: $roo

知道下拉列表为什么不设置其初始值吗?初始负载表示选择。。。但我希望它说的是最底层初始JSON中提供的NCI值

理想情况下,我希望savejson不包含下拉列表中的每一项。这就是为什么我有来自不同来源的数据结构的原因。我无法通过下拉列表使用字符串重新选择正确的项目


我是不是遗漏了什么?如果是,请解释,我会更新我的答案

否则,如果你不想选择。。要成为仅显示文本的初始值,而不是值,请删除选项Caption,然后选择列表中的第一项:

<select data-bind="options: $root.compoundDoseForm,
                   optionsText: 'name',
                   value: doseForm"></select>

如果您没有默认选项,或者您想强制用户选择某个内容并进行验证以备份它(如果它是必填字段),则可以使用选项标题。

只需将选择数据绑定更改为:

    <select data-bind="options: $root.compoundDoseForm,
                   optionsText: 'name',
                   optionsValue: 'code',
                   value: $root.compound().doseForm().code,
                   optionsCaption: 'Choose...'"></select>

我不得不放弃名称和代码格式,在下拉列表中只使用字符串数组。这是合理的,因为我保证项目是唯一的,我可以将它们转换回代码存储

<div data-bind="with: compound">

    <h3>Dose Form</h3>
    <select
        data-bind="options: $root.compoundDoseForm, value: doseForm,
                   optionsCaption: 'Choose dose form...'"></select>

</div>
<p>
    <button data-bind='click: $root.save'>Save to JSON</button>
</p>
<textarea data-bind='value: $root.lastSavedJson' rows='5' cols='60'> </textarea>
<script>
    var Compound = function(data) {
        data = data || {};
        this.doseForm = ko.observable(data.doseForm);
    }

    var CompoundsModel = function(compound) {
        var self = this;
        self.compound = ko.observable(compound);
        self.compoundDoseForm = ko.observableArray([ "NCI Values", "Not Specified" ]);

        this.save = function() {
            self.lastSavedJson(JSON.stringify(ko.toJS(self.compound), null, 2));
        };
        self.lastSavedJson = ko.observable("");
    }

    ko.applyBindings(new CompoundsModel(new Compound({
        "doseForm" : "NCI Values"
    })));
</script>

易于理解的只需删除选项标题:干杯,谢谢。因为这在with:component的范围内,所以可以将$root.component.doseForm.code缩短为只填充doseForm.code下拉列表,但更改值后,保存JSON并没有反映新值。之前的值确实为空,我需要强制用户选择。我很高兴你解释了这一点,这对我来说并不明显。谢谢…它似乎有效,但下拉列表仅显示第一个值。我已更新默认值,尝试将其设置为下拉列表中的第二个值,但没有效果http://jsfiddle.net/jslim180/gcnaY/3/.
<div data-bind="with: compound">

    <h3>Dose Form</h3>
    <select
        data-bind="options: $root.compoundDoseForm, value: doseForm,
                   optionsCaption: 'Choose dose form...'"></select>

</div>
<p>
    <button data-bind='click: $root.save'>Save to JSON</button>
</p>
<textarea data-bind='value: $root.lastSavedJson' rows='5' cols='60'> </textarea>
<script>
    var Compound = function(data) {
        data = data || {};
        this.doseForm = ko.observable(data.doseForm);
    }

    var CompoundsModel = function(compound) {
        var self = this;
        self.compound = ko.observable(compound);
        self.compoundDoseForm = ko.observableArray([ "NCI Values", "Not Specified" ]);

        this.save = function() {
            self.lastSavedJson(JSON.stringify(ko.toJS(self.compound), null, 2));
        };
        self.lastSavedJson = ko.observable("");
    }

    ko.applyBindings(new CompoundsModel(new Compound({
        "doseForm" : "NCI Values"
    })));
</script>