【问题标题】:KnockoutJS Select Dropdown not prepopulating with selected valueKnockoutJS Select Dropdown 未预先填充所选值
【发布时间】:2013-11-12 20:34:34
【问题描述】:

这是小提琴:

http://jsfiddle.net/adNuR/2187/

// Template
<div  data-bind="foreach: lines">
     <p data-bind="text: item.description"></p>
     <select data-bind="value: item, options: sampleOptions, optionsText: 'description', optionsCaption: 'Please select'"></select>
</div>


// JS
var sampleOptions = [
        { description: "item 1" },
        { description: "item 2" },
        { description: "item 3" },
        { description: "item 4" }
        ];    

var Model = function() {
    var self = this;
    self.lines = ko.observableArray([
        { item: { description: "item 1" } },
        { item: { description: "item 2" } }
    ]);
};

ko.applyBindings(new Model());

基本上我有一个对象绑定到一个选择框,但它没有选择下拉列表中的选定选项。如果我将所选选项的文本数据绑定到另一个元素,它将显示正确的值,但无论我尝试什么,我似乎都无法让选择框加载初始预选值。

可能是一些琐碎和愚蠢的事情,但我似乎无法弄清楚...任何帮助表示赞赏。

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    您的问题可能与此重复:Select element's initial value

    所以基本上你需要比较两个文字,看看应该在下拉列表中最初设置哪个值。看起来它不适用于整个对象。您的示例的快速修复将是这个(更新的小提琴:http://jsfiddle.net/adNuR/2189/):

     <select data-bind="value:item.description, options: sampleOptions, optionsValue:'description', optionsText: 'description', optionsCaption: 'Please select'"></select>
    

    但您可能希望在选项中添加一些适当的 id 并根据这些进行比较。

    【讨论】:

    • 是的,真正的代码要复杂得多,并且保存动态生成的对象,其中包含嵌套列表,代表表单中稍后其他选择框的可能值,所以我真的需要保存整个对象而不仅仅是文字。事实证明,由于您提到的原因,这并不能很好地工作,所以我现在只是对其进行了重新设计,使其工作方式完全不同,而且似乎还可以。不过会接受这个答案,因为它确实解决了小提琴中概述的具体问题:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多