选择了 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 下拉绑定的主要内容,如果未能解决你的问题,请参考以下文章