MainData仿Backbone Model式 数据模型记录器
MainData仿Backbone Model式 数据模型记录器
主要思想:将 数据记录处理 和 因为数据变化而产生的页面渲染 两者解耦, 让页面元素可以与数据进行关联绑定,杜绝因为遗忘或是逻辑复杂导致的“页面展现与数据不符”现象。同时能更容易地解决大型页面的开发难题。未来还可用于解决多个页面间数据同步困难的难题
/** * 使用方式:数据变化时,调用MainData.set方法来改变内存中的数据。在外部,通过MainData.change方法来监听数据变化,并在回调函数中执行页面渲染。 * * API: * set(key, value, *silent) 设置一个数据,silent为true则不会触发回调 * get(key) 获取一个数据的值 * change(key, callback) 监听一个数据,若该数据发生变化,则调用callback */ var MainData = (function() { var _attrs = {}, _changeListeners = {}, callChange = function(attr, nValue, oValue) { if (_changeListeners[attr]) { for (var i = 0, l = _changeListeners[attr].length; i < l; i++) { _changeListeners[attr][i].call && _changeListeners[attr][i].call(this, nValue, oValue) } } }; return { set: function(obj, arg, silent) { if (arg != void 0) { obj = new (function() { this[obj] = arg }) } for (var i in obj) { if (obj.hasOwnProperty(i)) { silent || callChange(i, obj[i], _attrs[i]); _attrs[i] = obj[i] } } }, get: function(attr) { return _attrs[attr] }, change: function(attr, callback) { if (typeof attr != 'string' || typeof callback != 'function') throw ('argument error: function change(attr:string, callback:function)'); (_changeListeners[attr] || (_changeListeners[attr] = [])).push(callback) } } })();