TodoMVCにおけるBackbone+MarionetteJS+RequireJS例のソースコード解析の二データ処理
5303 ワード
jQueryを使用する場合、ほとんどの時間はDomノードの処理に焦点を当て、Domノードにイベントをバインドするなどします.フロントエンドmvcフレームbackboneはどうですか?
M-Model、Collectionなどは、バックグラウンドデータとのインタラクションをカプセル化したデータ処理に焦点を当て、使用時にデータの変化にイベントをバインドし、Dom(ここではView)に更新することができます.
V-View(Marionette拡張、ItemView、CollectionView、ComponentView、LayoutView)がある場合、Domノードの処理に焦点を当てます.
C-Controller:Router(Marionette拡張、Controllerあり)URLのルーティングを解釈し、URLの変化を傍受した後、対応するModelを取り、対応するViewを更新する
総じて言えば、以前は複雑なデータを記述してDomノードとインタラクティブなコードを簡単にすることができ、構成することができ、明らかになった.
次は2つのデータ処理モジュールです
js/models/Todo.js
js/collections/TodoList.js
M-Model、Collectionなどは、バックグラウンドデータとのインタラクションをカプセル化したデータ処理に焦点を当て、使用時にデータの変化にイベントをバインドし、Dom(ここではView)に更新することができます.
V-View(Marionette拡張、ItemView、CollectionView、ComponentView、LayoutView)がある場合、Domノードの処理に焦点を当てます.
C-Controller:Router(Marionette拡張、Controllerあり)URLのルーティングを解釈し、URLの変化を傍受した後、対応するModelを取り、対応するViewを更新する
総じて言えば、以前は複雑なデータを記述してDomノードとインタラクティブなコードを簡単にすることができ、構成することができ、明らかになった.
次は2つのデータ処理モジュールです
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])
});
});