继《Backbone之旅:前端MVC架构初体验(上)》,上篇中最后的代码已经完全达到最初提出的几点要求,现在就结合Backbone
提供的能力,来继续精简代码。最后的目标就是将上篇中的代码全部重构为Backbone
的MVC
模式。
上篇中最后一次改造就已经使用到了callback
的方式,所以我们索性再加上Event
机制吧,因为Backbone
内置了这个能力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| var events = _.clone(Backbone.Events);
var TodoList = function(){};
TodoList.prototype.add = function(options){ $.ajax({ url: '/add', type: 'POST', dataType: 'json', data: { todoContent: options.todoContent }, success: options.success }); };
var NewTodoView = function(options){ this.todoList = options.todoList;
events.on('todo:add', this.appendTodo, this); events.on('todo:add', this.clearTextArea, this);
$('#new-todo form').submit($.proxy(this.addTodo, this)); };
NewTodoView.prototype.addTodo = function(e){ e.preventDefault();
this.todoList.add({ todoContent: $('#new-todo').find('textarea').val(), success: function(data){ events.trigger('todo:add', data.todoContent); } }); };
|
现在既然调用add()
时传入的success
属性已经完全不涉及到DOM
操作了,而是单纯的事件触发,那完全可以把这个行为放置到TodoList
原型的add()
方法中去了,这样重用性更高。