javascript - objetos - ¿No sabe cómo obtener claves de enlace de datos y valores observables usando elemento?
matriz javascript (2)
Necesito obtener claves de enlace de datos y valorizar usando elemento.
<select id="selector" data-bind="options:selectOptions,value:selectedValue"></select>
var ViewModel = {
selectOptions:ko.observableArray([...]),
selectedValue:ko.observable()
...
some other stuff
...
}
En otro modelo de vista, puedo acceder al elemento dom ahora necesito actualizar el contexto de enlace del elemento observable.
¿Cómo puedo obtener claves y valores vinculados a datos?
necesito algo como esto
{
options:selectOptions,
value:selectedValue
}
Bueno, te recomiendo que uses esto. Puede manejarlo en javascript end usando el jquery unobtrusive plugin
.
http://joel.net/unobtrusive-data-binding-for-knockout-js
Para esto puedes crear un objeto
var binding = {
options: ''tickets'',
optionsCaption: "''Choose...''",
optionsText: "''name''",
value: ''chosenTicket''
}
Y úsalo así
$(''#tickets'').dataBind(binding);
En lugar de esto
<select
data-bind="
options: tickets,
optionsCaption: ''Choose...'',
optionsText: ''name'',
value: chosenTicket
"
></select>
de esta manera tendrá el objeto binding
disponible para volver a usar y su código estará bastante limpio. Asegúrese de llamarlo antes de applyBinding
.
ko.dataFor (elemento) ayudará. Ver -
http://knockoutjs.com/documentation/unobtrusive-event-handling.html
En su otro modelo de vista donde tiene el elemento, llame a:
var bound_vm = ko.dataFor(element)
bound_vm será lo que sea view-model vinculado a ese elemento.
No creo que puedas obtener la clave / vals del enlace original; KO lo ha analizado en funciones. Presumiblemente, en su otro modelo de vista, ¿quiere cambiar lo que esté vinculado a las opciones, pero no sabe cómo se llama? Puede hacer algo como esto con jQuery para analizar el atributo de enlace de datos original:
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)
}
}