我试图建立类似于下图所示的东西。Backbone.js web应用程序 - 状态,历史和数据管理
国家&历史管理
我希望能够在应用中的任何时间序列化的当前状态,最好能版本的这些参数。
1)首先,用散列给出的任何有效参数覆盖defaultState参数的好方法是什么?
defaultState = {
mode : "2up", //Defines layout and how many widgets to init
models : [{year: 1980, selected: "SE"},
{year: 2010, selected: "NO"}] //Widget models
}
var AppRouter = Backbone.Router.extend({
routes: {
'': 'hashChangeHandler',
'v1?:params': 'hashChangeHandlerV1'
},
hashChangeHandlerV1: function(params) {
//here do something to override defaultState with params on init
//set models and layout etc.
}
});
//Handle history entries separately??
collection.bind("change", updateHistory)
function updateHistory() {
//each model toJSON(), then jQuery.param.querystring etc.
appRouter.navigate('v1' + state, false);
}
2)请问上面做版本的一个有效方法是什么?(如果状态参数/ API发生变化,为v1路由指定一个特定的处理程序,另一个用于v2)如果您可以举一个可用于此窗口化可视化应用程序的状态/历史解决方案的示例,那么我会非常快乐:)
3)我想要防止拖动时间滑块和某些其他事件时设置历史记录。我可以在拖动滑块时移除collection.change事件侦听器(它跟踪所有实例化的WidgetModels),或者您会建议什么?
数据管理
意见之前被实例化(当他们的模型的选择属性发生变化),我想,以确保数据(300-400 KB的数字统计。数据)被加载。
4)在Backbone中解决这个问题的典型方法是什么?(即延迟model.trigger事件,直到属性是稳定的。)
感谢您的回复。具体情况是,在重新绘制视图之前,模型中属性“selectedCountry”的更改应获取300-400 KB的CSV数据。什么是好方法? – dani
同样。当“选定国家”发生变化时: - 视图拦截并显示“加载”或类似内容 - 您应该加载统计信息(可能是统计信息收集),并在加载时触发事件 - 视图拦截此事件,隐藏“加载”并显示数据 模型应该加载数据,在fetch的成功回调中,您可以触发一个事件,让应用程序的其余部分知道它已加载。 – dira