0

我试图建立类似于下图所示的东西。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事件,直到属性是稳定的。)

enter image description here

回答

0

4 - 等待您的模型加载,然后才实例化的意见。

具体来说,您应该有一个人(可能是应用程序视图)来侦听您加载数据的事件并创建视图。

如果您的数据在模型中加载,而不是success回调fetch您可以触发一个事件让应用程序的其余部分知道它已加载。

如果您的数据加载到集合中,您可以收听集合的reset事件。

+0

感谢您的回复。具体情况是,在重新绘制视图之前,模型中属性“selectedCountry”的更改应获取300-400 KB的CSV数据。什么是好方法? – dani

+0

同样。当“选定国家”发生变化时: - 视图拦截并显示“加载”或类似内容 - 您应该加载统计信息(可能是统计信息收集),并在加载时触发事件 - 视图拦截此事件,隐藏“加载”并显示数据 模型应该加载数据,在fetch的成功回调中,您可以触发一个事件,让应用程序的其余部分知道它已加载。 – dira