ventajas tutorial react examples emberjs ember docs desventajas caracteristicas ember.js navigation ember-data uncaught-exception

ember.js - tutorial - emberjs api docs



Uncaught: no se puede llamar a rerender en una vista que se destruye (1)

Cuando navego por mi aplicación, a menudo obtengo este error que destruye aún más toda la navegación en mi aplicación, y tengo que volver a cargar toda la página:

Uncaught You can''t call rerender on a view being destroyed

Yo, y un par de chicos en el canal IRC de Ember descubrieron cuál es la causa del problema.

Es el asistente de grupo de https://github.com/emberjs/group-helper que uso. Toda la aplicación está configurada para usar eso, y muchas cosas se rompen si la elimino porque entonces muchas etiquetas metamorph comienzan a crearse nuevamente.

¿Alguna idea de cómo modificar el helper para que desaparezca el error?

var get = Ember.get, set = Ember.set, EmberHandlebars = Ember.Handlebars; EmberHandlebars.registerHelper(''group'', function(options) { var data = options.data, fn = options.fn, view = data.view, childView; childView = view.createChildView(Ember._MetamorphView, { context: get(view, ''context''), template: function(context, options) { options.data.insideGroup = true; return fn(context, options); } }); view.appendChild(childView); });

Actualizado: las cosas a continuación están desactualizadas y solo están allí porque estaban en la publicación original

En mi aplicación, tengo estas tres subclases, en las cuales baso todas mis vistas, controladores de array y rutas.

Ver:

PageView = Ember.View.extend({ title: '''', identifier: '''', classNames: [''page''], willDestroyElement: function () { var elm_classes = this.$().attr(''class'') + '' out'', elm_height = this.$().height(), temporary_container = $(''<div class="''+elm_classes+''">''); this.$().children().appendTo(temporary_container); temporary_container.insertAfter(this.$()); window.setTimeout(function() { temporary_container.remove(); }, animationKillDuration); }, didInsertElement: function() { $(document).trigger(''royalbeer-page-rendered''); } });

Controlador de matriz

RoyalArrayController = Ember.ArrayController.extend({ goto: function(route, slug) { if (!slug) this.transitionToRoute(route); else this.transitionToRoute(route, slug); } });

Ruta:

RoyalRoute = Ember.Route.extend({ setupController: function(controller, model) { var modelName = this.routeName.substr(0, 1).toUpperCase() + this.routeName.substr(1), slug = model; if (model.hasOwnProperty(''slug'')) slug = model.slug; controller.set(''model'', App[modelName].find({''slug'': slug})); }, serialize: function(slug, params) { var name, object; object = {}; name = params[0]; object[name] = slug; return object; } });

Utilizo la función goto en el controlador de array para vincular elementos en mi aplicación para la navegación con {{action goto ''routename'' slug}} , y mi serializador y setupController en mi ruta están configurados para poder manejar eso, lo cual funciona perfectamente hasta que ocurra el error.

Y solo puedo adivinar que es por eso que la cosa se rompe.

¿Alguna idea sobre qué está pasando y cómo solucionarlo?


Lo he resuelto ahora quitando el helper del grupo y reescribí todo mi CSS de usar: first-child /: last-child to: first-of-type /: last-of-type. Incluyendo Twitter Bootstrap. Funciona. Pero realmente me gustaría una manera de hacer que Ember no hinche mi DOM con etiquetas de metamorfosis en general.