Deteniendo el controlador Ember.js

Mi pregunta es muy básica, por un lado, pero, por otro lado, la situación general es más compleja, además de que realmente no puedo obtener ninguna muestra funcional.

Estoy desarrollando/manteniendo una aplicación web que actualmente se encuentra en transición desde la base de código GWT a Ember.js.

La mayor parte del código más nuevo ya se basa en Ember.js y creo que es realmente increíble. El problema es que no podemos usar Ember Router ya que GWT maneja todas las solicitudes. Para permitir que la aplicación se ejecute en esta configuración inusual, tenemos archivos JavaScript especiales que crean nuestros objetos principales de Ember (controladores y modelos) para nosotros.

Como puede imaginar, la navegación entre pestañas es engorrosa y la maneja GWT, quien crea objetos Ember cuando es necesario. Estamos en tránsito hacia un mundo nuevo y valiente Ember Router y todo.

Pero mientras tanto, este es el problema al que me enfrento en este momento.

El usuario hace clic en un enlace que abre una página que contiene alguna tabla basada en Ember. Los datos se recuperan del servidor utilizando algún código Ajax. Si tiene éxito, genera un bucle forEach que intenta enviar a ObjectObject toda la fecha recibida a nuestros componentes basados ​​en Ember.

Mi problema ocurre cuando el usuario cambia rápidamente entre pestañas. En este caso, la primera lista de objetos aún no ha terminado de renderizarse y, de repente, hay un nuevo conjunto de objetos que manejar. Esto hace que Ember arroje errores como: "Error no detectado: no se pueden realizar operaciones en un Metamorph que no está en el DOM".

y

"NotFoundError no detectado: se intentó hacer referencia a un nodo en un contexto en el que no existe".

¿Es posible evitar que el bucle intente renderizarse? Intenté verificar si el controlador en cuestión ya está en DOM y lo está, ¿hay alguna forma de notificar a Ember que este objeto ya no es válido?

Perdón por una pregunta larga y la falta de muestra en ejecución.

preguntado el 09 de septiembre de 13 a las 22:09

En tus pestañas de gwt, ¿puedes ejecutar algún javascript antes de que cambie la pestaña? -

Ya lo estoy haciendo -

2 Respuestas

Probablemente modificaría el código de la pestaña de cambio para que solo se ejecute después de que se haya completado el renderizado, de esa manera no estás jugando con los objetos de brasas mientras se usan.

  Ember.run.scheduleOnce('afterRender', this, function(){
    // call GWT switch tab routine
  });

Respondido el 10 de Septiembre de 13 a las 00:09

Gracias Daniel y Márcio Rodrigues Correa Júnior. finalmente, lo que hice fue agregar un parche que verificaría el contexto actual de la aplicación (en mi caso, la pestaña seleccionada actualmente). Si al recibir la respuesta de AJAX, la aplicación está en el contexto correcto (lo que significa que el usuario no ha cambiado la pestaña), continúe. De lo contrario, simplemente ignore la respuesta y no intente representarla.

Ahora parece estar funcionando

Respondido el 10 de Septiembre de 13 a las 22:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.