2013-07-02 17 views
3

當我在我的應用程序導航,我經常會收到這樣的錯誤,進一步摧毀所有導航在我的應用程序的視圖,我需要重新加載整個頁面:未捕獲的:你不能調用重新呈現在被破壞

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

我和Ember IRC頻道的幾個男孩找出了導致問題的原因。

這是我使用的https://github.com/emberjs/group-helper的小組幫手。整個應用程序設置爲使用該應用程序,並且如果我刪除了許多內容,因爲很多metamorph標記開始再次創建。

任何想法如何修改幫手,使錯誤消失?

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

更新:下面的東西已經過時,只有在那裏,因爲它是在原崗位

在我的應用程序,我有這三個子類,這是我基地所有我的看法,陣列控制器中的路線。

查看:

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函數的n在陣列控制器中綁定我的應用程序中的元素以便與{{action goto 'routename' slug}}導航,並且我的路由器上的序列化程序和setupController被設置爲能夠處理該問題,直到發生錯誤才能正常工作。

而且我只能猜測是因爲那些東西被打破了。

關於正在發生什麼以及如何解決它的任何想法?

+0

我更新了這篇文章,因爲我針對問題的真正原因。我添加了導致錯誤的確切代碼。 – chrisbuchholz

+0

感謝您發表本文!我有同樣的錯誤,並刪除組助手也修復它。我沒有進一步研究爲什麼。我可能也會離開小組幫手。 –

回答

2

我已經解決了它現在通過一起刪除組助手,並重寫所有我的CSS使用:第一個孩子/:最後一個孩子到:第一個類型/:最後一個類型。包括Twitter Bootstrap。有用。但我真的很喜歡讓Ember不會使用metamorph標籤膨脹我的DOM。