/ / ¿Estoy construyendo incorrectamente manejadores de enlace? - knockout.js, enlace personalizado

¿Estoy construyendo incorrectamente controladores de enlace? - knockout.js, enlace personalizado

En todos mis controladores de encuadernación personalizados de nocaut,siempre omita la actualización de devolución de llamada. Mi razonamiento es que puedo hacer todo el trabajo que necesito hacer dentro de la devolución de llamada de init. Allí puedo crear computadores, llamar a applyBindingsToNode (si es que necesito) o configurar suscripciones manuales a los suscriptores y hacer mi manipulación de DOM dentro de esas suscripciones.

Mi preocupación es que los enlaces predeterminados en los nocauts se crean utilizando solo la devolución de llamada de actualización.(Actualizar: Ya no, el valor y algunos otros enlaces solo usan init ahora) ¿Hay algún inconveniente para hacer todo el trabajo dentro de la devolución de llamada de init? ¿Hay algo que me esté perdiendo? ¡Gracias!

Respuestas

1 para la respuesta № 1

Creando computados y suscripciones en el init La función, como lo está haciendo, es totalmente compatible con Knockout desde la versión 3.0. Es una técnica más avanzada que el uso. update ya que significa que debe tener más cuidado para asegurarse de "volver a capturar y responder a todas las dependencias, así como a disponer de las suscripciones en el momento adecuado.

Para referencia, el update La función en sí se maneja de manera bastante simple en Knockout (modificada ligeramente para mayor claridad):

var handlerUpdateFn = handler.update;
if (typeof handlerUpdateFn == "function") {
ko.computed(
function () {
handlerUpdateFn(node, getValueAccessor(bindingKey), allBindings,
bindingContext.$data, bindingContext);
},
null,
{ disposeWhenNodeIsRemoved: node }
);
}

0 para la respuesta № 2

Estás reemplazando el mecanismo de actualización delcontrolador de enlace con computed y suscripciones, así que sí, esto claramente no es la mejor práctica al crear controladores de enlace personalizados, de lo contrario no habría una función de actualización.

Aparte de violar las mejores prácticas, usted es justocreando más sobrecarga con las suscripciones y cómputos agregados que no son necesarios. El flujo del manejador de enlace se ejecutará por usted. Knockout ya está evaluando la expresión enviada al manejador de enlace y ejecutando la función de actualización para usted. eso, agregar computados y suscripciones que podrían muy bien causar un comportamiento inesperado. Puede haber casos en que esto podría ser necesario hasta cierto punto, pero no usar el mecanismo de actualización incorporado solo puede causar problemas y confusión.