【问题标题】:Binding Selected Item on a dropdown using Knockout使用 Knockout 在下拉列表中绑定所选项目
【发布时间】:2014-01-08 09:14:59
【问题描述】:

我正在尝试使用敲除绑定下拉列表的选定值。 HTML 是:

<div>
Dummy
<select id="dummy" data-bind="options: DummyOptions, optionsCaption : 'Select..', optionsText: 'Message', value: selectedValue"></select>
</div>
<button data-bind="click : setDefault">click me </button>
<div data-bind="visible: selectedValue"> <!-- Appears when you select something -->
    You have chosen a country with population
    <span data-bind="text: selectedValue() ? selectedValue().Message : 'unknown'"></span>.

javascript是:

var dummyOptions =  ko.observableArray([{ isSelected: false, Message: "Test1" }, { isSelected: false, Message: "Test2"},{ isSelected: true, Message: "Test3"}]);

var defaultOption = ko.observable();

var vm = {
DummyOptions : dummyOptions,
selectedValue : defaultOption,
setDefault : function(){
    defaultOption = ko.observable( ko.utils.arrayFirst(dummyOptions(), function(item) {
        return item.isSelected;
    }) );   
}
};

ko.applyBindings(vm);

如果我在没有 setDefault 函数并直接设置 defaultOption 变量的情况下尝试这段 JS 代码,一切正常。但是,如果我按照列出代码的方式进行操作,绑定将不起作用。

小提琴的链接是:http://jsfiddle.net/tNZ8f/

有什么建议吗??

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    您的setDefault 函数不会更新defaultOption,而是重新定义它。您正在创建新的 observable,并且绑定不会收到有关更改的通知。 defaultOption = new value 不是向 observable 写入新值的正确方法。相反,您应该使用新值作为参数调用 observable 作为函数:defaultOption( new value )

    您的 setDefault 函数应如下所示:

    setDefault : function(){
        defaultOption( ko.utils.arrayFirst(dummyOptions(), function(item) {
            return item.isSelected;
        }) );   
    }
    

    更新的 jsfiddle:http://jsfiddle.net/tNZ8f/1/

    【讨论】:

    • 只是另一个澄清......它有点无关......如何为每个单独的
    • 带有attr 绑定。但是你不能用select 绑定来做到这一点。要自定义 &lt;option&gt; 标签,您必须使用自己的 foreach 循环创建它们。
    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 2014-06-06
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2018-03-12
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多