如何使用元素来获取数据绑定键和值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
之前调用它。