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)
}
}
})();

MainData仿Backbone Model式 数据模型记录器的更多相关文章

  1. Backbone Model——数据模型

    Model是Backbone中所有数据模型的基类,用于封装原始数据,并提供对数据进行操作的方法,我们一般通过继承的方式来扩展和使用它. 如果你做过数据库开发,可能对ORM(对象关系映射)不会陌生,而B ...

  2. backbone.Model 源码笔记

    backbone.Model backbone的model(模型),用来存储数据,交互数据,数据验证,在view里面可以直接监听model来达到model一改变,就通知视图. 这个里面的代码是从bac ...

  3. keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72859145 中文文档:http://keras-cn.readthedocs.io/ ...

  4. Backbone Model 源码简谈 (版本:1.1.0 基础部分完毕)

    Model工厂   作为model的主要函数,其实只有12行,特别的简练 var Model = Backbone.Model = function(attributes, options) { va ...

  5. backbone Model

    requirejs.config({ baseUrl: 'js/lib', paths:{ app: '../app' } }) // Start the main app logic. //requ ...

  6. backbone Model调用save方法的时候提交方式

    horizon使用的是backbone框架,但是我们的后台api都是只接收post请求,请求的路径为/api/,根据backbone的官档解释: backbone的model.save方法会判断当前的 ...

  7. 仿jQuery之链式调用

    链式调用的形式其实就是对象调用一连串的方法.为什么能连续调用这么多的方法?因为调用方法返回调用的对象,于是乎就可以一如既往,一往无前地调用下去.链式调用的原理就是在方法中返回执行上下文this,每次调 ...

  8. VS2010中没有ado.net entity data model实体数据模型这一选项-解决办法

    前提先安装VS2010 SP1包. 解决办法: 1.从VS2010的安装盘目录下面的WCU\EFTools找到ADONETEntityFrameworkTools_chs.msi和ADONETEnti ...

  9. Backbone Collection——数据模型集合

    如果将一个Model对象比喻成数据库中的一条记录,那么Collection就是一张数据表.它表示为一个模型集合类,用于存储和管理一系列相同类型的模型对象. 1.创建集合集合用于组织和管理多个模型,但它 ...

随机推荐

  1. GitHub Pages和每个项目绑定自定义域名(支持多个和顶级域名)

    假设我购买的域名为www.easonjim.com,想把www.easonjim.com和easonjim.com的域名跳转到下面的网址easonjim.github.io. 而我在github上的账 ...

  2. android下载简单工具类

    功能是实现下载文件,图片或MP3等,为了简单起见使用单线程,此代码为MarsAndroid教程的复制品,放在此处,留着参考. 首先是一个得到字节流随后保存到内存卡上的工具类: package com. ...

  3. rsync服务器安装配置

    #rsync指定端口号(10002)1 rsync -e 'ssh -p 10002' rsync (server -- client) #2014-3-3 -----------server---- ...

  4. POJ #2448 A New Operating System

    Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 1165   Accepted: 110 Case Time Limit: ...

  5. jQuery ajax - serialize() 方法-输出序列化表单值

    定义和用法 serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. 您可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素本身. 序列化的值可在生 ...

  6. 使用XmlSerializer序列化可空属性

    使用XmlSerializer可以方便的将对象序列化为xml,实现应用之间的数据交互.但是XmlSerializer却不能很好地序列化类型中的可空字段. 例如,有如下定义的类Person: [Seri ...

  7. linux中配置NTP基本操作

    计算机的系统时间是由计算机内的石英晶体震荡电路以固定的震荡频率产生的date 查看当前时区vim /etc/sysconfig/clock  修改时区配置文件ZONE="America/Ne ...

  8. Wavefront OBJ 转换成OpenGL ES使用的C/C++文件

    项目需要展示3D max模型,通过调研

  9. DRY原则

    DRY--Don't Repeat Yourself Principle,直译为"不要重复自己"原则 DRY简而言之,就是不要写重复的代码.原则本身很简单,但是,对于OOAD(面向 ...

  10. try throw catch

    #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace st ...