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)
}
}
})();
MainData仿Backbone Model式 数据模型记录器的更多相关文章
- Backbone Model——数据模型
Model是Backbone中所有数据模型的基类,用于封装原始数据,并提供对数据进行操作的方法,我们一般通过继承的方式来扩展和使用它. 如果你做过数据库开发,可能对ORM(对象关系映射)不会陌生,而B ...
- backbone.Model 源码笔记
backbone.Model backbone的model(模型),用来存储数据,交互数据,数据验证,在view里面可以直接监听model来达到model一改变,就通知视图. 这个里面的代码是从bac ...
- keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)
引自:http://blog.csdn.net/sinat_26917383/article/details/72859145 中文文档:http://keras-cn.readthedocs.io/ ...
- Backbone Model 源码简谈 (版本:1.1.0 基础部分完毕)
Model工厂 作为model的主要函数,其实只有12行,特别的简练 var Model = Backbone.Model = function(attributes, options) { va ...
- backbone Model
requirejs.config({ baseUrl: 'js/lib', paths:{ app: '../app' } }) // Start the main app logic. //requ ...
- backbone Model调用save方法的时候提交方式
horizon使用的是backbone框架,但是我们的后台api都是只接收post请求,请求的路径为/api/,根据backbone的官档解释: backbone的model.save方法会判断当前的 ...
- 仿jQuery之链式调用
链式调用的形式其实就是对象调用一连串的方法.为什么能连续调用这么多的方法?因为调用方法返回调用的对象,于是乎就可以一如既往,一往无前地调用下去.链式调用的原理就是在方法中返回执行上下文this,每次调 ...
- VS2010中没有ado.net entity data model实体数据模型这一选项-解决办法
前提先安装VS2010 SP1包. 解决办法: 1.从VS2010的安装盘目录下面的WCU\EFTools找到ADONETEntityFrameworkTools_chs.msi和ADONETEnti ...
- Backbone Collection——数据模型集合
如果将一个Model对象比喻成数据库中的一条记录,那么Collection就是一张数据表.它表示为一个模型集合类,用于存储和管理一系列相同类型的模型对象. 1.创建集合集合用于组织和管理多个模型,但它 ...
随机推荐
- 认识http协议
http:Hyper Text Transfer Protocol,超文本传输协议.是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和 ...
- [NOIP2012] 普及组
寻宝 大模拟 #include<iostream> #include<cmath> #include<algorithm> using namespace std; ...
- C#如何在子窗体获取父窗体的实例
在子窗体可以使用this.Owner来获取父窗体的实例
- Io 异常: The Network Adapter could not establish the connection 解决方法
1.IP错误: 在设置URL时错误,例如:jdbc:oracle:thin:@192.168.1.80:1521:orcl 数据库服务器是否正确:ping 服务器IP是否通畅.ping不通则将URL更 ...
- POJ 2533 Longest Ordered Subsequence(最长上升子序列(NlogN)
传送门 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subseque ...
- [Android]Volley源码分析(一)
一. 如何使用Volley? 1. 首先定义一个RequestManager类,用来在Android程序启动时对Volley进行初始化.RequestManager为单例类,因为只有在程序启动时调用, ...
- WINDBUG常用命令
配置: File->Symbol path-> SRV*C:\symbols*http://msdl.microsoft.com/download/symbols 载入sos.dll 执 ...
- JPA mysql wildfly jboss 存储时乱码
首先确保mysql的库,表创建时指定的字符集collation. 可以直接用命令行插入中文,看查询出来是不是中文. insert into live_main_sync (cn_name, creat ...
- iOS - 落叶加载动画效果
代码下载地址:https://github.com/nLoser/LeafLoadingView 效果: 说明:效果是在网上看到的,并且自己按照效果自己实现,树叶使用CAEmitterLayer做的, ...
- Mysql数据库设置定时任务
最近手头在做一个拍卖的电商项目. 中间需要将到点的拍卖会状态设置为进行中. 我们的解决方案是Mysql的定时器任务,这里进行一个简单的总结. 1.使用范围 不是所有的MySQL版本都支持,Mysql ...