zoukankan      html  css  js  c++  java
  • 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)
            }
        }
    })();
  • 相关阅读:
    Load Balancing 折半枚举大法好啊
    Big String 块状数组(或者说平方分割)
    K-th Number 线段树(归并树)+二分查找
    D. Powerful array 莫队算法或者说块状数组 其实都是有点优化的暴力
    CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
    运行时Runtime的API
    UIView的API
    UIControl的API
    UIScrollView的API
    使用KVO键值监听
  • 原文地址:https://www.cnblogs.com/fengyuqing/p/maindata.html
Copyright © 2011-2022 走看看