From 5ae473431cb5464eb5479942e7c942311c74d582 Mon Sep 17 00:00:00 2001 From: Sergey Zhigalov Date: Wed, 2 Apr 2014 15:45:17 +0600 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/srp/refactoring/PersonCollection.js | 8 ++++++ tasks/srp/refactoring/PersonView.js | 31 ++++++++++++++++++++++ tasks/srp/refactoring/formatter.js | 10 +++++++ tasks/srp/refactoring/index.html | 12 +++++++++ tasks/srp/refactoring/index.js | 10 +++++++ tasks/srp/refactoring/person.js | 32 +++-------------------- 6 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 tasks/srp/refactoring/PersonCollection.js create mode 100644 tasks/srp/refactoring/PersonView.js create mode 100644 tasks/srp/refactoring/formatter.js create mode 100644 tasks/srp/refactoring/index.html create mode 100644 tasks/srp/refactoring/index.js 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..0bf4afe --- /dev/null +++ b/tasks/srp/refactoring/PersonView.js @@ -0,0 +1,31 @@ +var Backbone = require('Backbone'), + rivets = require('rivets'), + yaCounter100500 = require('yaCounter100500'); + +var PersonView = Backbone.View.extend({ + + events: { + "click .b-person": "handleClick" + }, + + className: "header", + + initialize: function(options) { + var viewModel = { + model: options.model + }; + this.logger = options.logger; + 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..16e6f0e --- /dev/null +++ b/tasks/srp/refactoring/index.html @@ -0,0 +1,12 @@ + + + + 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..8e96ad5 --- /dev/null +++ b/tasks/srp/refactoring/index.js @@ -0,0 +1,10 @@ +var PersonCollection = require('PersonCollection'), + PersonView = require('PersonView') + +module.export = 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; From 8b34f00591e27497d63832d980223a3d9f65bc5b Mon Sep 17 00:00:00 2001 From: Sergey Zhigalov Date: Wed, 2 Apr 2014 15:55:19 +0600 Subject: [PATCH 2/2] fix --- tasks/srp/refactoring/PersonView.js | 4 +++- tasks/srp/refactoring/index.html | 1 + tasks/srp/refactoring/index.js | 6 +++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tasks/srp/refactoring/PersonView.js b/tasks/srp/refactoring/PersonView.js index 0bf4afe..8330c21 100644 --- a/tasks/srp/refactoring/PersonView.js +++ b/tasks/srp/refactoring/PersonView.js @@ -8,13 +8,15 @@ var PersonView = Backbone.View.extend({ "click .b-person": "handleClick" }, - className: "header", + layout: $('.header'), initialize: function(options) { var viewModel = { model: options.model }; this.logger = options.logger; + + this.setElement(this.layout); this.dataBindTo(viewModel); }, diff --git a/tasks/srp/refactoring/index.html b/tasks/srp/refactoring/index.html index 16e6f0e..b04b4bf 100644 --- a/tasks/srp/refactoring/index.html +++ b/tasks/srp/refactoring/index.html @@ -8,5 +8,6 @@ {person.name} + \ No newline at end of file diff --git a/tasks/srp/refactoring/index.js b/tasks/srp/refactoring/index.js index 8e96ad5..4bef113 100644 --- a/tasks/srp/refactoring/index.js +++ b/tasks/srp/refactoring/index.js @@ -1,10 +1,10 @@ var PersonCollection = require('PersonCollection'), - PersonView = require('PersonView') + PersonView = require('PersonView'); -module.export = function () { +(function () { var options = { model: new PersonCollection(/*...*/), logger: console }; var view = new PersonView(options); -}; +})();