[英]value object not updating when item selected from a select list in knockoutjs
[英]In knockout when using <select> how to get the selected item to select the correct item on startup when you have an object
给出这个咖啡脚本
data =
Foo: "B"
Foos: [ "A", "B" ]
Blah:
Id: 2
Name: "B"
Blahs: [
Id: 1
Name: "A"
,
Id: 2
Name: "B"
]
class Vm
constructor: (data) ->
@Blah = ko.observable()
ko.mapping.fromJS data, {}, this
vm = new Vm(data)
console.log vm
ko.applyBindings vm;
然后给出这两个下拉绑定...
<select data-bind="options: Blahs,optionsText: 'Name', value: Blah">
<select data-bind="options: Foos, value: Foo">
小提琴:
http://jsfiddle.net/keith_nicholas/3eYHd/
Foo的字符串在启动时正确设置了选定的选项,而带有对象Blah的字符串则没有(实际上,它将选定的项更改为列表中的第一项)
有没有简单的方法可以使带对象的选择行为与带字符串的选择相同?
注意:我可以做类似的事情
http://jsfiddle.net/keith_nicholas/LJpJw/
replaceWithMatching = (prop, list, match) ->
prop (x for x in list when x[match]() == prop()[match]())[0]
接着
replaceWithMatching @Blah, @Blahs(), "Id"
将现有对象映射到列表中存在的对象。 但是我一直在寻找更简洁/声明性的东西,也许像:-
像<select data-bind="options: Blahs,optionsText: 'Name', matchOn: 'Id', value: Blah">
当您绑定value
绑定中的对象时,则它们需要是对同一对象的引用。
基本上:
var a = { name: "Bob" };
var b = { name: "Bob" };
var c = b;
alert(a === b) //false
alert(b === c) //true
因此,在示例中,您可以先定义选择数组,然后将所选值初始化为该数组中的一个对象。
这是您的示例更新: http : //jsfiddle.net/rniemeyer/ampys/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.