He escrito algunos enlaces personalizados usando KnockoutJS. Todavía no estoy seguro de cuándo usar ko.util.unwrapObservable(item)
Mirando el código, esa llamada básicamente verifica si item
es observable. Si lo es, devuelve el valor(), si no es así, solo devuelve el valor. En cuanto a la sección sobre el golpe de gracia sobre la creación de enlaces personalizados, tienen la siguiente sintaxis:Cuándo usar ko.utils.unwrapObservable?
var value = valueAccessor(), allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
En este caso, se puede observar a través de invocar la ()
pero entonces también llamar ko.utils.unwrapObservable
. Solo trato de entender cuándo usar uno frente a otro o si siempre debo seguir el patrón anterior y usar ambos.
Entonces, ¿el patrón que he publicado es la mejor práctica para las encuadernaciones personalizadas en el futuro? – arb
Realmente depende de la situación. Algunos enlaces personalizados están diseñados para funcionar únicamente con observables, por lo que puede verificar desde el principio (ko.isObservable) que es un observable y entonces sería libre de desenvolverlo con(). Si está recibiendo un objeto que puede tener observables anidados, entonces es mejor que haga un 'ko.toJS (suObjeto)' en lugar de utilizar 'ko.utils.unwrapObservable', si está tratando de obtener una versión desenvuelta del objeto pasar a un widget o a una biblioteca de terceros. En general, es más seguro usar 'ko.utils.unwrapObservable' para admitir observables y no observables. –
Supongo que estoy confundido con el propósito de 'ko.utils.unwrapObservable'. Al mirar el código, simplemente verifica si es observable y si lo es, Knockout invoca '()' para obtener el valor de lo observable, de lo contrario, simplemente devuelve el valor de no observable. Si todo lo que me interesa es el valor de los datos pasados al enlace, ¿por qué no puedo usar siempre '()'? – arb