2013-01-21 46 views
0

當瀏覽器返回按鈕和emberjs時,我觀察到一種不希望的行爲。如果用戶點擊後退按鈕,頁面會顯示兩次呈現的車把模板。瀏覽器返回點擊後在DOM中重複模板

如果歷史記錄足夠長,那麼「工作」甚至多次,頁面變得越來越長。有人看到這個問題(甚至解決了它)?

我的應用程序目前相當於Trek在http://trek.github.com/上顯示的內容,不同之處在於我轉移到了pre4的新路由器API。

版本

  • emberjs 1.0 PRE4
  • 車把1.0 RC1
+0

我沒有看到任何問題在github那樣。如果你可以提供一個證明問題的jsfiddle,我會感興趣。也許是路線中的某些東西,或者是模板中的商店。 –

+0

有兩種情況。我找到了第一個原因:控制器的狀態被存儲在模型中,因此沒有被正確刪除/重新初始化。 我相信第二個也是與狀態之間的路由問題。 –

回答

1

後續我自己的問題。我的代碼有兩個問題。其中一個我追蹤並分享解決方案,以防有人遇到類似問題。

我有一個模型定義像

App.Member.reopenClass({ 
    allMembers: [], 
    findAll: function(){ 
    $.ajax({ 
     url: 'https://api.company.com/members', 
     dataType: 'json', 
     context: this, 
     success: function(response){ 
     response.data.forEach(function(member){ 
      this.allMembers.addObject(App.Member.create(member)) 
     }, this) 
     } 
    }) 
    return this.allMembers; 
    } 
}); 

allMembers: []是保留了所有成員的參考。在前後移動時,成員從後端重新加載並再次存儲在allMembers上。

要解決這一個,只是在findAll定義allMembers

App.Member.reopenClass({ 
    findAll: function(){ 
    var allMembers = []; 
    $.ajax({ 
     url: 'https://api.company.com/members', 
     dataType: 'json', 
     context: allMembers, 
     success: function(response){ 
     response.data.forEach(function(member){ 
      this.addObject(App.Member.create(member)) 
     }, this) 
     } 
    }) 
    return allMembers; 
    } 
}); 

還有就是最有可能也與我相結合的途徑方式的第二個問題。我會盡快發佈解決方案。

更新,2013年1月22日

好了,第二個問題已被發現,以及和emberJS +後退按鈕現在完美的作品。再次,我想快速總結一下,如果有人絆倒了這個問題,那麼問題是什麼。

路由定義看起來如下:

App.Router.map(function() { 
    this.resource("areas", { path: "/areas" }); 
    this.resource("area", { path: "/areas/:refId" }, function() { 
    this.route("new", { path: "/areas/new" }); 
}); 

此外,「新」和「區域」中使用的非常相同的視圖和控制器。因此,問題出在父路由「區域」和其子路由「新」之間。企圖把所有的結合在一起,並做一些神奇的控制器內區分它是這種情況下,是不建議...

所以,解決辦法是:

  • 使用混入,以避免重複代碼( 'new'和'area'都使用一些Google Geocoder的東西)
  • 創建一個很好的簡單路由,如下所示。

和代碼將

App.Router.map(function() { 
    this.route("areas", { path: "/areas" }); 
    this.route("area", { path: "/areas/:refId" }); 
    this.route("newarea", { path: "/area/new"}); 
}); 

就是這樣。享受或評論。總是很高興得到來自專家的輸入

相關問題