Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用元素获取数据绑定键和值可观测值?_Javascript_Jquery_Mvvm_Knockout.js_Viewmodel - Fatal编程技术网

Javascript 如何使用元素获取数据绑定键和值可观测值?

Javascript 如何使用元素获取数据绑定键和值可观测值?,javascript,jquery,mvvm,knockout.js,viewmodel,Javascript,Jquery,Mvvm,Knockout.js,Viewmodel,我需要使用元素获取数据绑定键和可观察的值 <select id="selector" data-bind="options:selectOptions,value:selectedValue"></select> var ViewModel = { selectOptions:ko.observableArray([...]), selectedValue:ko.observable() ... some other stuff ... }

我需要使用元素获取数据绑定键和可观察的值

<select id="selector" data-bind="options:selectOptions,value:selectedValue"></select>

var ViewModel = {
   selectOptions:ko.observableArray([...]),
   selectedValue:ko.observable()
   ...
   some other stuff
   ...
}
dataFor(元素)将有所帮助。看-

在具有图元的其他视图模型中,调用:

var bound_vm = ko.dataFor(element)
bound_vm将是针对该元素绑定的任何视图模型

我认为您无法获得原始绑定的密钥/VAL;KO已将其解析为函数。可能在另一个视图模型中,您想更改绑定到选项的内容,但不知道它的名称?可以使用jQuery执行类似的操作来解析原始数据绑定属性:

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)

    }
}

我建议你用这个。您可以使用
jqueryunobtrusiveplugin
在javascript端处理它

为此,可以创建一个对象

var binding = {
    options: 'tickets',
    optionsCaption: "'Choose...'",
    optionsText: "'name'",
    value: 'chosenTicket'
}
像这样使用它

{
   options:selectOptions,
   value:selectedValue
}
$('#tickets').dataBind(binding);
而不是这个

<select 
    data-bind="
        options: tickets, 
        optionsCaption: 'Choose...',
        optionsText: 'name',
        value: chosenTicket
    "
></select>


这样,就可以重用
绑定
对象,并且代码将非常干净。确保在应用绑定之前调用它

您的目标非常不明确。你能解释一下吗?如果你想这样做,这通常是一个指标,表明你没有这样做way@raheelshan我需要访问绑定到元素的bindingContext观察值。@KongaRaju您能解释一下您的目标,而不是试图将其简化为您认为需要做的事情吗?您可能不需要执行您的要求,因为它打破了标准的敲除模式。@xdumaine请查看更新的问题如何知道viewmodel中的特定可观察名称?很有趣。我不确定我是否知道如何做到这一点,但您可以使用jQuery进行黑客攻击。更新即将到来。更好的方式,但我正在寻找一种方式做。