当我们使用jQuery时大部分时间是聚焦于Dom节点的处理,给Dom节点绑定事件等等;前端mvc框架backbone则如何呢?

M-Model,Collection等,是聚焦于数据的处理,它把与后台数据的交互封装好,然后我们使用时可以给数据的变化绑定事件,可以相应的去更新到Dom(这里是View)

V-View(Marionette扩展了,有ItemView,CollectionView,CompositeView和LayoutView),则聚焦于处理Dom节点

C-Controller:  Router(Marionette扩展了,有Controller) 用于解释URL的路由,监听URL变化然后,取相应的Model并更新相应的View

总的来说使得以前要编写复杂的数据与Dom节点交互代码变得简单,可配置,明了。

下面是两个数据处理的模块

js/models/Todo.js

/*global define */
define([
'backbone',
'localStorage'//backbone localStorage插件块,用来提供Restful API,只不过数据是以html5的local storage形式存储,当后台使用
], function (Backbone) {
'use strict'; return Backbone.Model.extend({
localStorage: new Backbone.LocalStorage('todos-backbone'),//用于访问local storage 可以不用理它 defaults: {//todo model默认的数据形式
title: '',
completed: false,
created: 0
}, initialize: function () {//model初始化时如果是新的则更新到后台数据库(这里是新增到local storage)
if (this.isNew()) {
this.set('created', Date.now());
}
}, toggle: function () {//todo model向外提供的改状态(completed:true/false)的函数,可以看到在TodoItemView.js会引用此函数
return this.set('completed', !this.get('completed'));
}
});
});

js/collections/TodoList.js

/*global define */
define([
'backbone',
'models/Todo',
'localStorage'
], function (Backbone, Todo) {
'use strict'; return Backbone.Collection.extend({
model: Todo,//collection数据集的个体model是Todo localStorage: new Backbone.LocalStorage('todos-backbone'), getCompleted: function () {//TodoList collection向外提供获取completed为true的数据集的函数,可以看到在CompletedCount.js会引用此函数
return this.where({completed: true});
}, getActive: function () {//TodoList collection向外提供获取completed为false的数据集的函数,可以看到在ActiveCount.js会引用此函数
return this.where({completed: false});
}, comparator: 'created'//model的排序是按created来排序,也可以调用collection.sort([options])来强制排序
});
});

TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之二 数据处理的更多相关文章

  1. TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之一

    Marionette牵线木偶,Backbone是脊骨的意思,Marionette是基于Backbone做扩展库,可以理解为把脊骨骨架绑线扯着变成牵线木偶动起来哈哈,使backbone更易使用呵呵! 构 ...

  2. TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之三 Views

    这个版本的TodoMVC中的视图组织划分比较细,更加易于理解,这也得益于Marionette为我们带来了丰富的视图选择,原生的backbone只有views,而Marionette则有itemview ...

  3. Orleans例子源码

    这是Orleans系列文章中的一篇.首篇文章在此 我共享以下我现在写教程的简单的Orleans例子源码. 这个代码已经是我为了写word改动过了的.不过大体内容是通用的. 我写博客总体想法是:去除所有 ...

  4. Shiro官方快速入门10min例子源码解析框架2-Session

    Shiro自身维护了一套session管理组件,它可以独立使用,并不单纯依赖WEB/Servlet/EJB容器等环境,使得它的session可以任何应用中使用. 2-Session)主要介绍在quic ...

  5. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  6. Vue3中的响应式对象Reactive源码分析

    Vue3中的响应式对象Reactive源码分析 ReactiveEffect.js 中的 trackEffects函数 及 ReactiveEffect类 在Ref随笔中已经介绍,在本文中不做赘述 本 ...

  7. Java并发包中Semaphore的工作原理、源码分析及使用示例

    1. 信号量Semaphore的介绍 我们以一个停车场运作为例来说明信号量的作用.假设停车场只有三个车位,一开始三个车位都是空的.这时如果同时来了三辆车,看门人允许其中它们进入进入,然后放下车拦.以后 ...

  8. MNIST 例程源码分析 TensorFlow 从入门到精通

    按照上节步骤, TensorFlow 默认安装在 /usr/lib/python/site-packages/tensorflow/ (也有可能是 /usr/local/lib……)下,查看目录结构: ...

  9. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

随机推荐

  1. php网址显示excel表格内容

    /** * excel表格内容在网页中显示 * * 首先需要下载PHPExcel 工具包 * 网址: http://phpexcel.codeplex.com/releases/view/119187 ...

  2. List集合的迭代器方法

    1.后台JAVA代码的实现 //获取所有的支付方式的迭代器 // 获取支付方式 @RequestMapping(value = "get/payed/type", method = ...

  3. 分析DH加密算法,一种适基于密钥一致协议的加密算法。

    DH Diffie-Hellman算法(D-H算法),密钥一致协议.是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想.简单的说就是允许两名用户在公开媒体上交换信息以生成&quo ...

  4. AE开发能否实现TOC Control里添加多个Data Frame

    问题: 在ArcMap中,菜单Insert下Data Frame,可以在TOC中增加Data Frame,在MapControl或者PageLayoutControl下都可以正常显示多个Data Fr ...

  5. junit学习笔记

    junit编程规范 测试方法上必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录 测试类的包应该和被测试类保持一致 测试单元中的每个方法 ...

  6. [Head First设计模式]山西面馆中的设计模式——建造者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...

  7. 一次性事务和CTE插入数据的比较

    有时要构造一些数据来做测试数据,像下面这样: IF OBJECT_ID(N'T14') IS NOT NULL BEGIN DROP TABLE T14 END GO CREATE TABLE T14 ...

  8. @property 参数

    /* 1.set方法内存管理相关的参数 * retain : release旧值,retain新值(适用于OC对象类型) * assign : 直接赋值(默认,适用于非OC对象类型) * copy : ...

  9. gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题

    问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...

  10. AJAX工作原理及其优缺点

    1.什么是AJAX?AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它 ...