如何使用元素来获取数据绑定键和值observable?

我需要使用element获取数据绑定键和值observable。

 var ViewModel = { selectOptions:ko.observableArray([...]), selectedValue:ko.observable() ... some other stuff ... } 

在其他viewmodel中,我现在可以访问dom元素,我需要更新元素的绑定上下文observable。

如何获取数据绑定键和值?

我需要这样的东西

 { options:selectOptions, value:selectedValue } 

ko.dataFor(元素)会有所帮助。 见 –

http://knockoutjs.com/documentation/unobtrusive-event-handling.html

在您拥有元素的其他视图模型中,调用:

 var bound_vm = ko.dataFor(element) 

然后,bound_vm将是针对该元素绑定的任何视图模型。

我认为你不能得到原始装订的关键/值; KO已将其解析为函数。 大概在你的其他视图模型中你想要改变任何绑定到选项的东西,但你不知道它叫什么? 您可以使用jQuery执行类似的操作来解析原始的data-bind属性:

 OtherViewModel: { the_logic: function() { // We have the element already var element = [already set to a DOM node] // Get the view-model bound to the element var bound_vm = ko.dataFor(element) // Parse the original binding attribute on the element $($(element).attr("data-bind").split(",")).each( function(idx, binding) { var parts = binding.split(":") binding_info[parts[0].trim()] = parts[1].trim() } ) // Now binding_info should hold what you want. EG we can set whatever // the options binding is bound to like this: bound_vm[binding_info[options]]([1,2,3) } } 

好吧,我建议你使用它。 你可以使用jquery unobtrusive plugin在javascript端处理它。

http://joel.net/unobtrusive-data-binding-for-knockout-js

为此,您可以创建一个对象

 var binding = { options: 'tickets', optionsCaption: "'Choose...'", optionsText: "'name'", value: 'chosenTicket' } 

并像这样使用它

 $('#tickets').dataBind(binding); 

而不是这个

  

通过这种方式,您可以重用binding对象,并且您的代码将非常干净。 确保在applyBinding之前调用它。