选择了 Knockout.js 下拉绑定

Posted

技术标签:

【中文标题】选择了 Knockout.js 下拉绑定【英文标题】:Knockout.js dropdown bind selected 【发布时间】:2014-06-11 13:51:03 【问题描述】:

绑定下拉菜单的初始选择有问题,如果指定“optionValue”一切都会好的,但是如果指定了这个,那么在选择更改后,它只会返回值而不是整个对象,这是什么我想要返回整个对象,如下所示: http://jsfiddle.net/Princa/tuMta/109/

那么我应该如何绑定初始值而不指定'optionValue'?我设置了

selectedCountry: ko.observable(new Country("Sweden", 29000000)),

但是没用

【问题讨论】:

更新了我的答案,小提琴有效 【参考方案1】:

optionValue 设置仅适用于未选择项目时显示在选择列表中的“占位符”值。

如果您希望实际默认选择列表中的项目,请在视图模型本身中通过将selectedCountry 变量设置为有效值来执行此操作。

来自您的 jsfiddle 的示例(在此处更新:http://jsfiddle.net/tuMta/110/):

viewModel.selectedCountry(viewModel.availableCountries()[1]);

【讨论】:

太棒了!我没有意识到这两个对象不是“相同的”。我在哪里可以找到这种文件?! 这是一个很好的问题......不知道哪里是最好的指向你的地方......这篇文章可能有助于解释它:stamat.wordpress.com/2013/06/22/javascript-object-comparison。一般来说,只有在内存中占据相同位置的对象才被认为是相等的。因此,独立创建的两个对象将始终是独立的对象,即使它们包含相同的内容。 这样想,如果创建两个独立的Country对象,修改一个的名字,另一个不修改。这表明它们是不同的对象。 是的,我知道它们不是同一个对象,但我不知道下拉列表期望完全匹配的对象。通常我认为我们只是匹配选定的值,即值类型,但对于对象,即引用类型可能在 KO 中处理不同。【参考方案2】:

问题是连你创建的2个类都是瑞典的,js不知道,所以你要让它知道。试试这个方法:

var viewModel = function ()  
var defaultSelected = new Country("Sweden", 29000000);
this.availableCountries = ko.observableArray([
    new Country("UK", 65000000),
    new Country("USA", 320000000),
    defaultSelected]);
this.selectedCountry= ko.observable(defaultSelected); 
;

http://jsfiddle.net/tuMta/120/

【讨论】:

@JosephGabriel 我的错,真正的问题是有 2 个不同的对象,新的 conty('sweden') 与新的国家('sweden') 不同。生病更新

以上是关于选择了 Knockout.js 下拉绑定的主要内容,如果未能解决你的问题,请参考以下文章

在 Knockout.js 中异步应用绑定

Knockout.js Select2 绑定。将 Select2 升级到 v4 后损坏

Knockout.js 与多个 Select2 绑定

Knockout JS绑定元素的属性为另一个元素

Knockout JS 购物车练习

Knockout JS 将元素的属性绑定到另一个元素