アプリをナビゲートすると、アプリ内のすべてのナビゲーションをさらに破壊するこのエラーが頻繁に発生し、ページ全体をリロードする必要があります。
Uncaught You can't call rerender on a view being destroyed
私と Ember IRC チャンネルの 2 人の少年たちは、何が問題を引き起こしているのかを突き止めました。
私が使用しているのは、 https://github.com/emberjs/group-helperのグループ ヘルパーです。アプリ全体がそれを使用するように設定されており、それを削除すると、多くのメタモーフ タグが再び作成され始めるため、多くのものが壊れます。
エラーが消えるようにヘルパーを変更する方法はありますか?
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);
});
更新:以下のものは古く、元の投稿にあったため、そこにあるだけです
私のアプリには、これら 3 つのサブクラスがあり、すべてのビュー、アレイ コントローラー、およびルートのベースになっています。
意見:
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');
}
});
アレイコントローラー
RoyalArrayController = Ember.ArrayController.extend({
goto: function(route, slug) {
if (!slug)
this.transitionToRoute(route);
else
this.transitionToRoute(route, slug);
}
});
ルート:
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;
}
});
配列コントローラーで goto 関数を使用して、アプリ内の要素を とバインドしてナビゲーションし{{action goto 'routename' slug}}
ます。ルート上のシリアライザーと setupController は、それを処理できるように設定されており、エラーが発生するまで完全に機能します。
そして、壊れるのはそれらのせいだとしか思えません。
何が起こっているのか、それを修正する方法についてのアイデアはありますか?