diff --git a/tasks/srp/refactoring/PersonCollection.js b/tasks/srp/refactoring/PersonCollection.js new file mode 100644 index 0000000..bba7005 --- /dev/null +++ b/tasks/srp/refactoring/PersonCollection.js @@ -0,0 +1,8 @@ +var Backbone = require('Backbone'), + Person = require('Person'); + +var PersonCollection = Backbone.Collection.extend({ + model: Person +}); + +module.export = PersonCollection; diff --git a/tasks/srp/refactoring/PersonView.js b/tasks/srp/refactoring/PersonView.js new file mode 100644 index 0000000..8330c21 --- /dev/null +++ b/tasks/srp/refactoring/PersonView.js @@ -0,0 +1,33 @@ +var Backbone = require('Backbone'), + rivets = require('rivets'), + yaCounter100500 = require('yaCounter100500'); + +var PersonView = Backbone.View.extend({ + + events: { + "click .b-person": "handleClick" + }, + + layout: $('.header'), + + initialize: function(options) { + var viewModel = { + model: options.model + }; + this.logger = options.logger; + + this.setElement(this.layout); + this.dataBindTo(viewModel); + }, + + dataBindTo: function (viewModel) { + return rivets.bind(this.el, viewModel); + }, + + handleClick: function () { + yaCounter100500.params('user_page_visited'); + this.logger.log('debug', 'user_page_visited'); + } +}); + +module.export = PersonView; \ No newline at end of file diff --git a/tasks/srp/refactoring/formatter.js b/tasks/srp/refactoring/formatter.js new file mode 100644 index 0000000..5bf2cca --- /dev/null +++ b/tasks/srp/refactoring/formatter.js @@ -0,0 +1,10 @@ +var rivets = require('rivets'); + +_.extend(rivets.formatters, { + isSameOrigin: function (url) { + var $parser = $(''); + $parser.attr('href', url); + + return location.origin === $parser.origin; + } +}); \ No newline at end of file diff --git a/tasks/srp/refactoring/index.html b/tasks/srp/refactoring/index.html new file mode 100644 index 0000000..b04b4bf --- /dev/null +++ b/tasks/srp/refactoring/index.html @@ -0,0 +1,13 @@ + + + + SOLID + + +
+ {person.name} +
+ + + \ No newline at end of file diff --git a/tasks/srp/refactoring/index.js b/tasks/srp/refactoring/index.js new file mode 100644 index 0000000..4bef113 --- /dev/null +++ b/tasks/srp/refactoring/index.js @@ -0,0 +1,10 @@ +var PersonCollection = require('PersonCollection'), + PersonView = require('PersonView'); + +(function () { + var options = { + model: new PersonCollection(/*...*/), + logger: console + }; + var view = new PersonView(options); +})(); diff --git a/tasks/srp/refactoring/person.js b/tasks/srp/refactoring/person.js index 7531fd9..9963c3b 100644 --- a/tasks/srp/refactoring/person.js +++ b/tasks/srp/refactoring/person.js @@ -1,41 +1,17 @@ function Person(options) { options = options || {}; - this.name = options.name; - this.url = options.url; - - this.$el = this.render(); - this.bindEvents(); - this.$el.appendTo('.header'); + this.setName(options.name); + this.setUrl(options.url); } Person.prototype = { - render: function () { - var extraClass = this.isSameOrigin(this.url) ? ' b-person_origin_same' : ''; - return $('' + this.name + ''); - }, - - isSameOrigin: function (url) { - var parser = document.createElement('a'); - parser.href = url; - - return location.origin === parser.origin; - }, - setName: function (name) { this.name = name; - this.$el.html(this.name); }, setUrl: function (url) { this.url = url; - this.$el.attr('href', this.url); - this.$el.toggleClass('b-person_origin_same', this.isSameOrigin(this.url)); - }, - - bindEvents: function () { - this.$el.on('click', function () { - yaCounter100500.params('user_page_visited'); - console.log('debug', 'user_page_visited'); - }); } }; + +module.export = Person;