Backbone.js网络应用程序 - 状态,历史和数据管理

时间:2011-10-18 08:22:33

标签: javascript backbone.js state data-visualization browser-history

我正在尝试构建类似于下图中显示的内容。

国家&历史管理
我希望能够在应用程序中随时序列化当前状态,并且最好能够对这些参数进行版本化 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事件侦听器(跟踪所有实例化的WidgetModel),或者你会建议什么?

数据管理
在实例化视图之前(以及当模型的选择属性发生变化时),我想确保加载数据(数据统计数据为300-400 KB)。
4)在Backbone中解决此问题的典型方法是什么? (即延迟model.trigger事件直到属性稳定。)

enter image description here

1 个答案:

答案 0 :(得分:0)

4 - 等待你的模型加载,然后才实例化视图。

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

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

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