0
我目前正在使用Backbone編寫應用程序,出於某種原因,它不更新視圖,但僅在某些情況下。Backbone model.change()not firing
如果我在index.html#/ blog/2上刷新頁面,它會加載頁面很好,一切都很好。但是,如果我在index.html#/ blog/1處刷新頁面,然後將URL更改爲index.html#/ blog/2並按Enter(不刷新),則更改永遠不會被觸發。
這是我的路由器:
makeChange: function() {
// Set activePage to the current page_id => /blog/2
var attributes = {activePage: this.page_id};
var $this = this;
// Loop through all sections in the app
app.sections.some(function(section) {
// Check if section has the page
if(!section.validate(attributes))
{
// If it has, set the activePage to /blog/2
section.set(attributes, {silent: true});
// Set active section to whatever section-id was matched
app.set({activeSect: section.id}, {silent: true});
console.log('Calling change!');
// Calling change on both the app and the section
app.change();
section.change();
console.log('Change complete!');
return true;
}
});
}
這是應用程序視圖(被稱爲「應用程序」中引用了上述^):
var AppView = Backbone.View.extend({
initialize: function(option) {
app.bind('change', _.bind(this.changeSect, this));
},
changeSect: function() {
var newSect = app.sections.get(app.get('activeSect'));
var newSectView = newSect.view;
if(!app.hasChanged('activeSect'))
newSectView.activate(null, newSect);
else
{
var oldSect = app.sections.get(app.previous('activeSect'));
var oldSectView = oldSect.view;
newSectView.activate(oldSect, newSect);
oldSectView.deactivate(oldSect, newSect);
}
}
});
告訴我,如果你需要看一些其他的類/模型/視圖。
檢查該模型具有實際上已更新。也許你應該綁定到集合呢? –
首先是應用程序模型?試圖弄清楚你在上面做什麼。無論如何,當瀏覽網址(無需刷新),您的控制檯被稱爲?如果它是一個模型或集合,它不應該有所作爲。您仍然可以綁定到更改並重置事件。 – TYRONEMICHAEL
@GregRoss @TyroneMichael「app」是AppView的一個實例,所以它是Backbone.View的擴展。我將如何檢查視圖是否已更新?我嘗試'router.log(this.page_id)'在router.makeChange()中,所以我知道我在設置activePage並輸出/ blog/2,所以它**應該**已被更改,但沒有任何其他方式確認它,我不能確定。至於控制檯被調用的問題,我該如何確定?它輸出「呼叫改變!」以及「更改完成!」這是在router.makeChange()輸出,所以路由器至少被調用.. – Tanax