El componente extraíble falla si el elemento se elimina antes de que se devuelva la plantilla

Tengo un enlace personalizado KO que agrega un componente a la página (como elemento virtual pero no creo que esto importe) y luego le aplica un modelo de vista. El componente carga su plantilla a través de require desde el servidor.

Sin embargo, durante la carga, recibo un problema en el que se actualiza el enlace personalizado y elimino el elemento de la página (quiero que esté ordenado si no es necesario).

Esto da como resultado una condición de carrera: si la búsqueda astronómica de la plantilla no ha finalizado antes de que se eliminen los elementos cuando KO intenta aplicar el componente, no puede encontrar la etiqueta de cierre y arroja un error.

Me pregunto si hay algo que alguien pueda sugerir para aliviar el problema. Ya sé que no hay un mecanismo de devolución de llamada enapplyBindings y yo nopensar afterRenderCallback ayudará, ya que los errores antes de llegar tan lejos. Me preguntaba si hay una manera decancelar, detener o abortar el proceso y no hay

¿Algunas ideas?

Aquí hay unviolín Lo que demuestra mi problema.

Mi encuadernación personalizada se ve así:

ko.bindingHandlers.customBinding = {
    update: function(element, valueAccessor){
      var $element = $(element)

      if(ko.unwrap(valueAccessor())){
        $element.data("controller", new CustomBindingController(element));
      } else {
        var controller = $element.data("controller");

        if(controller){
          controller.destroy();

          $element.removeData("controller");
        }
      }
    }
  }

Está haciendo llamadas a una clase de controlador que se ve así:

function CustomBindingController(element){
    var self = this,
    $element = $(element),
    $component;

    function init(){
      $component = $("<!-- ko component: { name: \"my-component\", params: $data } --><!-- /ko -->");

      $("#component-container").append($component);

      ko.applyBindings( { message: "Binding Applied!" }, $component[0]);

      self.destroy = destroy;
    }

    function destroy(){
      $component.remove();
    }

    init.call(self);
  }

El componente se carga mediante require:

  ko.components.register("my-component", {
    //template: "<p data-bind=\"text: message\"></p>"
    template: { require: "text!component-template" }
  });

Y una inicialización simplificada se parece a esto:

  var vm = { shouldBeBound: ko.observable(true) };

  ko.applyBindings(vm);

  vm.shouldBeBound(false);

En realidad, tengo algunas dependencias más complejas que establecen el indicador en falso después de que ha comenzado la inicialización.

Respuestas a la pregunta(1)

Su respuesta a la pregunta