gpt4 book ai didi

ember.js - 未捕获 : You can't call rerender on a view being destroyed

转载 作者:行者123 更新时间:2023-12-02 02:00:40 29 4
gpt4 key购买 nike

当我在我的应用程序中导航时,我经常会遇到这个错误,这进一步破坏了我应用程序中的所有导航,我必须重新加载整个页面:

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

我和 Ember IRC channel 的几个男孩找出了导致问题的原因。

这是来自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);
});

更新:下面的内容已经过时,只是因为它在原始帖子中才存在

在我的应用程序中,我有这三个子类,我的所有 View 、数组 Controller 和路由都基于它们。

查看:

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');
}
});

数组 Controller

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;
}
});

我使用数组 Controller 中的 goto 函数绑定(bind)我的应用程序中的元素以使用 {{action goto 'routename' slug}} 进行导航,我的序列化程序和我的路线上的 setupController 已设置能够处理这个问题,在错误发生之前它可以完美地工作。

我只能猜测是因为这些东西才坏掉的。

关于发生了什么以及如何解决它有什么想法吗?

最佳答案

我现在已经解决了这个问题,方法是一起删除组助手并将我的所有 css 从使用 :first-child/:last-child 重写为 :first-of-type/:last-of-type。包括 Twitter Bootstrap。有用。但我真的很想要一种方法,让 Ember 通常不会用变形标签使我的 DOM 膨胀。

关于ember.js - 未捕获 : You can't call rerender on a view being destroyed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420150/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com