當瀏覽器返回按鈕和emberjs時,我觀察到一種不希望的行爲。如果用戶點擊後退按鈕,頁面會顯示兩次呈現的車把模板。瀏覽器返回點擊後在DOM中重複模板
如果歷史記錄足夠長,那麼「工作」甚至多次,頁面變得越來越長。有人看到這個問題(甚至解決了它)?
我的應用程序目前相當於Trek在http://trek.github.com/上顯示的內容,不同之處在於我轉移到了pre4的新路由器API。
版本
- emberjs 1.0 PRE4
- 車把1.0 RC1
當瀏覽器返回按鈕和emberjs時,我觀察到一種不希望的行爲。如果用戶點擊後退按鈕,頁面會顯示兩次呈現的車把模板。瀏覽器返回點擊後在DOM中重複模板
如果歷史記錄足夠長,那麼「工作」甚至多次,頁面變得越來越長。有人看到這個問題(甚至解決了它)?
我的應用程序目前相當於Trek在http://trek.github.com/上顯示的內容,不同之處在於我轉移到了pre4的新路由器API。
版本
後續我自己的問題。我的代碼有兩個問題。其中一個我追蹤並分享解決方案,以防有人遇到類似問題。
我有一個模型定義像
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" });
});
此外,「新」和「區域」中使用的非常相同的視圖和控制器。因此,問題出在父路由「區域」和其子路由「新」之間。企圖把所有的結合在一起,並做一些神奇的控制器內區分它是這種情況下,是不建議...
所以,解決辦法是:
和代碼將
App.Router.map(function() {
this.route("areas", { path: "/areas" });
this.route("area", { path: "/areas/:refId" });
this.route("newarea", { path: "/area/new"});
});
就是這樣。享受或評論。總是很高興得到來自專家的輸入
我沒有看到任何問題在github那樣。如果你可以提供一個證明問題的jsfiddle,我會感興趣。也許是路線中的某些東西,或者是模板中的商店。 –
有兩種情況。我找到了第一個原因:控制器的狀態被存儲在模型中,因此沒有被正確刪除/重新初始化。 我相信第二個也是與狀態之間的路由問題。 –