diff --git a/tasks/srp/refactoring/person.html b/tasks/srp/refactoring/person.html new file mode 100644 index 0000000..318449c --- /dev/null +++ b/tasks/srp/refactoring/person.html @@ -0,0 +1,29 @@ + + + + +
+
+ + + + + + + diff --git a/tasks/srp/refactoring/person.js b/tasks/srp/refactoring/person.js index 7531fd9..94c32c6 100644 --- a/tasks/srp/refactoring/person.js +++ b/tasks/srp/refactoring/person.js @@ -1,41 +1,50 @@ -function Person(options) { - options = options || {}; - this.name = options.name; - this.url = options.url; - - this.$el = this.render(); - this.bindEvents(); - this.$el.appendTo('.header'); -} - -Person.prototype = { - render: function () { - var extraClass = this.isSameOrigin(this.url) ? ' b-person_origin_same' : ''; - return $('' + this.name + ''); +var isSameOrigin = function (url) { + var parser = document.createElement('a'); + parser.href = url; + + return location.origin === parser.origin; +}; + +var Logger = { + log: function (msg) { + //yaCounter100500.params(msg); + console.log('debug', msg); + } +}; + +var PersonModel = Backbone.Model.extend({}); + +var PersonView = Backbone.View.extend({ + initialize: function (o) { + this.listenTo(this.model, 'change:name', this._onNameChange); + this.listenTo(this.model, 'change:url', this._onUrlChange); + + this.template = o.template; + this.logger = o.logger }, - isSameOrigin: function (url) { - var parser = document.createElement('a'); - parser.href = url; + events: { + 'click a': '_onLinkClick' + }, - return location.origin === parser.origin; + _onNameChange: function () { + this.render(); }, - setName: function (name) { - this.name = name; - this.$el.html(this.name); + _onUrlChange: function () { + this.render(); }, - setUrl: function (url) { - this.url = url; - this.$el.attr('href', this.url); - this.$el.toggleClass('b-person_origin_same', this.isSameOrigin(this.url)); + _onLinkClick: function (e) { + this.logger.log('user_page_visited'); + e.preventDefault(); }, - bindEvents: function () { - this.$el.on('click', function () { - yaCounter100500.params('user_page_visited'); - console.log('debug', 'user_page_visited'); - }); + render: function() { + this.$el.html(this.template({ + data: this.model.attributes, + isSameOrigin: isSameOrigin + })); + return this; } -}; +});