2013-07-11 58 views
2

我有我存儲與當我執行App.reset時,爲什麼我的reopenClass狀態不會重置?

App.Person = Ember.Object.extend({ 
     firstName: '', 
     lastName: '' 
    }); 

    App.Person.reopenClass({ 
     people: [], 
     add: function(hash) { 
      var person = App.Person.create(hash); 
      this.people.pushObject(person); 
     }, 
     remove: function(person) { 
      this.people.removeObject(person); 
     }, 
     find: function() { 
      var self = this; 
      $.getJSON('/api/people', function(response) { 
       response.forEach(function(hash) { 
        var person = App.Person.create(hash); 
        Ember.run(self.people, self.people.pushObject, person); 
       }); 
      }, this); 
      return this.people; 
     } 
    }); 

一些全局狀態,當我調用App.reset()使用RC6和灰燼測試我注意到任何狀態是在全球人民陣列保持測試之間圍繞簡單的模型類。我看到一個顯示拆解的日誌是在測試之間調用的,它只是沒有清除這些人。我怎樣才能在QUnit拆解中重置?

module('integration tests', {             
     setup: function() { 
      Ember.testing = true; 
      this.server = sinon.fakeServer.create(); 
      this.server.autoRespond = true; 
      Ember.run(App, App.advanceReadiness); 
     }, 
     teardown: function() { 
      this.server.restore(); 
      App.reset(); //won't kill that global state ... 
     } 
    }); 

更新

如果你想嘲笑在RC6了「/」路線的錯誤會阻止你的模型鉤從你嘲笑XHR後再次點火(我希望看到這個固定在RC7 + )

https://github.com/emberjs/ember.js/issues/2997

回答

2

App.reset只破壞Ember的生成的對象。類沒有改變。

您將需要擴展重置方法並手動執行此清理。

App = Ember.Application.create({ 
    reset: function() { 
    this._super(); 
    App.Person.people = []; 
    } 
}); 
+0

只是一個簡短的說明,打電話超級是一個禁止出於某種原因,但它工作不管! –

+0

App.reset定義看起來像一個常規方法。 '_super'應該可以。但它正在推遲runloop上的東西。因此它最終有效。如果可能的話,你可以先做自定義重置的東西,然後調用_super。 –

+0

對於任何可能關注的人來說,只是一個快速更新 - 這在Ember 1.3.2中不起作用(似乎不再支持在此內部調用超級內容) –

相關問題