我有一個應用程序只在$(document).ready中加載數據一次。集合視圖和模型視圖之間有鏈接。視圖具有異步體系結構,因此它們在頁面刷新上呈現。但是當我點擊這些鏈接時,什麼都沒有呈現,因爲數據已經被抓取並且沒有事件被觸發。是否有插件或竅門可以處理這兩種情況?如何刷新Backbone.js頁面變化的異步視圖?
Backbone.Collection.prototype.lazyLoad = function (id) {
var model = this.get(id);
if (model === undefined) {
model = new this.model({ id: id });
this.add(model);
model.fetch();
}
return model;
}
var Col = Backbone.Collection.extend({
model: Model,
});
var Model = Backbone.Model.extend({});
var ColView = Backbone.View.extend({
...
initialize: function() {
this.collection.on('reset', this.render);
}
});
var ModelView = Backbone.View.extend({
...
initialize: function() {
this.model.on('change', this.render);
}
});
var AppRouter = Backbone.Router.extend({
routes: {
"": "colView",
"col/:id": "modelView"
},
colView: function() {
new ColView(collection: col);
}
modelView: function (id) {
new modelView(model: col.lazyLoad('modelId'));
}
});
$(document).ready(function() {
col = new Col;
col.fetch();
app = new AppRouter();
});
我們需要在這裏看到更多的代碼。你有鏈接定義的事件處理程序嗎?鏈接有什麼作用?你期待他們做什麼? – tkone
收集視圖有每個模型的鏈接。鏈接由AppRouter管理,即當我點擊'col/modelId'鏈接時,modelView被創建。但是這個視圖只在模型發送「更改」事件時呈現。它不會發生,因爲所有數據都提前獲取。 – chessman
我期望遵循下面的行爲:if(page'col/modelId'被刷新){在數據被提取時渲染'change'事件的模型} else {立即渲染模型} –
chessman