$(document).ready(function() { $('#new-status form').submit(function(e) { e.preventDefault(); $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: $('#new-status').find('textarea').val() }, success: function(data) { $('#statuses').append('<li>' + data.text + '</li>'); $('#new-status').find('textarea').val(''); } }); }); });
<body> <div id="new-status"> <h2>New monolog</h2> <form action=""> <textarea></textarea><br> <input type="submit" value="Post"> </form> </div> <div id="statuses"> <h2>Monologs</h2> <ul></ul> </div> </body>
+function addStatus(options) { + $.ajax({ + url: '/status', + type: 'POST', + dataType: 'json', + data: { text: $('#new-status textarea').val() }, + success: function(data) { + $('#statuses ul').append('<li>' + data.text + '</li>'); + $('#new-status textarea').val(''); + } + }); +} + $(document).ready(function() { $('#new-status form').submit(function(e) { e.preventDefault(); - $.ajax({ - url: '/status', - type: 'POST', - dataType: 'json', - data: { text: $('#new-status textarea').val() }, - success: function(data) { - $('#statuses ul').append('<li>' + data.text + '</li>'); - $('#new-status textarea').val(''); - } - }); + addStatus(); }); });
function addStatus(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', - data: { text: $('#new-status textarea').val() }, - success: function(data) { - $('#statuses ul').append('<li>' + data.text + '</li>'); - $('#new-status textarea').val(''); - } + data: { text: options.text }, + success: options.success }); } $(document).ready(function() { $('#new-status form').submit(function(e) { e.preventDefault(); - addStatus(); + addStatus({ + text: $('#new-status textarea').val(), + success: function(data) { + $('#statuses ul').append('<li>' + data.text + '</li>'); + $('#new-status textarea').val(''); + } + }); }); });
-function addStatus(options) { +var Statuses = function() { +}; +Statuses.prototype.add = function(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); -} +}; $(document).ready(function() { + var statuses = new Statuses(); + $('#new-status form').submit(function(e) { e.preventDefault(); - addStatus({ + statuses.add({ text: $('#new-status textarea').val(), success: function(data) { $('#statuses ul').append('<li>' + data.text + '</li>'); $('#new-status textarea').val(''); } }); }); });
var Statuses = function() { }; Statuses.prototype.add = function(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); }; +var NewStatusView = function(options) { + var statuses = options.statuses; + + $('#new-status form').submit(function(e) { + e.preventDefault(); + + statuses.add({ + text: $('#new-status textarea').val(), + success: function(data) { + $('#statuses ul').append('<li>' + data.text + '</li>'); + $('#new-status textarea').val(''); + } + }); + }); +}; + $(document).ready(function() { var statuses = new Statuses(); - $('#new-status form').submit(function(e) { - e.preventDefault(); - - statuses.add({ - text: $('#new-status textarea').val(), - success: function(data) { - $('#statuses ul').append('<li>' + data.text + '</li>'); - $('#new-status textarea').val(''); - } - }); - }); + new NewStatusView({ statuses: statuses }); });
var Statuses = function() { }; Statuses.prototype.add = function(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); }; var NewStatusView = function(options) { - var statuses = options.statuses; + this.statuses = options.statuses; - $('#new-status form').submit(function(e) { - e.preventDefault(); - statuses.add({ - text: $('#new-status textarea').val(), - success: function(data) { - $('#statuses ul').append('<li>' + data.text + '</li>'); - $('#new-status textarea').val(''); - } - }); - }); + $('#new-status form').submit(this.addStatus); }; +NewStatusView.prototype.addStatus = function(e) { + e.preventDefault(); + + this.statuses.add({ + text: $('#new-status textarea').val(), + success: function(data) { + $('#statuses ul').append('<li>' + data.text + '</li>'); + $('#new-status textarea').val(''); + } + }); +}; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); });
Uncaught TypeError: Cannot call method 'add' of undefined
var Statuses = function() { }; Statuses.prototype.add = function(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); }; var NewStatusView = function(options) { this.statuses = options.statuses; - $('#new-status form').submit(this.addStatus); + var add = $.proxy(this.addStatus, this); + $('#new-status form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); this.statuses.add({ text: $('#new-status textarea').val(), success: function(data) { $('#statuses ul').append('<li>' + data.text + '</li>'); $('#new-status textarea').val(''); } }); }; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); });
var Statuses = function() { }; Statuses.prototype.add = function(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); }; var NewStatusView = function(options) { this.statuses = options.statuses; var add = $.proxy(this.addStatus, this); $('#new-status form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); + var that = this; + this.statuses.add({ text: $('#new-status textarea').val(), success: function(data) { - $('#statuses ul').append('<li>' + data.text + '</li>'); - $('#new-status textarea').val(''); + that.appendStatus(data.text); + that.clearInput(); } }); }; +NewStatusView.prototype.appendStatus = function(text) { + $('#statuses ul').append('<li>' + text + '</li>'); +}; +NewStatusView.prototype.clearInput = function() { + $('#new-status textarea').val(''); +}; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); });
var events = _.clone(Backbone.Events);
+var events = _.clone(Backbone.Events); + var Statuses = function() { }; Statuses.prototype.add = function(options) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); }; var NewStatusView = function(options) { this.statuses = options.statuses; + events.on('status:add', this.appendStatus, this); + events.on('status:add', this.clearInput, this); + var add = $.proxy(this.addStatus, this); $('#new-status form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); - var that = this; - this.statuses.add({ text: $('#new-status textarea').val(), success: function(data) { - that.appendStatus(data.text); - that.clearInput(); + events.trigger('status:add', data.text); } }); }; NewStatusView.prototype.appendStatus = function(text) { $('#statuses ul').append('<li>' + text + '</li>'); }; NewStatusView.prototype.clearInput = function() { $('#new-status textarea').val(''); }; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; -Statuses.prototype.add = function(options) { +Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', - data: { text: options.text }, - success: options.success + data: { text: text }, + success: function(data) { + events.trigger('status:add', data.text); + } }); }; var NewStatusView = function(options) { this.statuses = options.statuses; events.on('status:add', this.appendStatus, this); events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); $('#new-status form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); - this.statuses.add({ - text: $('#new-status textarea').val(), - success: function(data) { - events.trigger('status:add', data.text); - } - }); + this.statuses.add($('#new-status textarea').val()); }; NewStatusView.prototype.appendStatus = function(text) { $('#statuses ul').append('<li>' + text + '</li>'); }; NewStatusView.prototype.clearInput = function() { $('#new-status textarea').val(''); }; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; var NewStatusView = function(options) { this.statuses = options.statuses; - events.on('status:add', this.appendStatus, this); events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); $('#new-status form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); this.statuses.add($('#new-status textarea').val()); }; -NewStatusView.prototype.appendStatus = function(text) { - $('#statuses ul').append('<li>' + text + '</li>'); -}; NewStatusView.prototype.clearInput = function() { $('#new-status textarea').val(''); }; +var StatusesView = function() { + events.on('status:add', this.appendStatus, this); +}; +StatusesView.prototype.appendStatus = function(text) { + $('#statuses ul').append('<li>' + text + '</li>'); +}; + $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); + new StatusesView(); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; var NewStatusView = function(options) { this.statuses = options.statuses; + this.el = $('#new-status'); events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); - $('#new-status form').submit(add); + this.el.find('form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); - this.statuses.add($('#new-status textarea').val()); + this.statuses.add(this.el.find('textarea').val()); }; NewStatusView.prototype.clearInput = function() { - $('#new-status textarea').val(''); + this.el.find('textarea').val(''); }; var StatusesView = function() { + this.el = $('#statuses'); + events.on('status:add', this.appendStatus, this); }; StatusesView.prototype.appendStatus = function(text) { - $('#statuses ul').append('<li>' + text + '</li>'); + this.el.find('ul').append('<li>' + text + '</li>'); }; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ statuses: statuses }); new StatusesView(); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; var NewStatusView = function(options) { this.statuses = options.statuses; - this.el = $('#new-status'); + this.el = options.el; events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); this.el.find('form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); this.statuses.add(this.el.find('textarea').val()); }; NewStatusView.prototype.clearInput = function() { this.el.find('textarea').val(''); }; -var StatusesView = function() { - this.el = $('#statuses'); +var StatusesView = function(options) { + this.el = options.el; events.on('status:add', this.appendStatus, this); }; StatusesView.prototype.appendStatus = function(text) { this.el.find('ul').append('<li>' + text + '</li>'); }; $(document).ready(function() { var statuses = new Statuses(); - new NewStatusView({ statuses: statuses }); - new StatusesView(); + new NewStatusView({ el: $('#new-status'), statuses: statuses }); + new StatusesView({ el: $('#statuses') }); });
…'
) . jQuery will create the necessary elements on the fly. This provides incredibly fast tests, since there are no DOM manipulations. var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; var NewStatusView = function(options) { this.statuses = options.statuses; this.el = options.el; events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); - this.el.find('form').submit(add); + this.$('form').submit(add); }; NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); - this.statuses.add(this.el.find('textarea').val()); + this.statuses.add(this.$('textarea').val()); }; NewStatusView.prototype.clearInput = function() { - this.el.find('textarea').val(''); + this.$('textarea').val(''); }; +NewStatusView.prototype.$ = function(selector) { + return this.el.find(selector); +}; var StatusesView = function(options) { this.el = options.el; events.on('status:add', this.appendStatus, this); }; StatusesView.prototype.appendStatus = function(text) { - this.el.find('ul').append('<li>' + text + '</li>'); + this.$('ul').append('<li>' + text + '</li>'); }; +StatusesView.prototype.$ = function(selector) { + return this.el.find(selector); +}; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); new StatusesView({ el: $('#statuses') }); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; -var NewStatusView = function(options) { - this.statuses = options.statuses; - this.el = options.el; - - events.on('status:add', this.clearInput, this); - - var add = $.proxy(this.addStatus, this); - this.$('form').submit(add); -}; +var NewStatusView = Backbone.View.extend({ + initialize: function(options) { + this.statuses = options.statuses; + this.el = options.el; + + events.on('status:add', this.clearInput, this); + + var add = $.proxy(this.addStatus, this); + this.$('form').submit(add); + } +}); NewStatusView.prototype.addStatus = function(e) { e.preventDefault(); this.statuses.add(this.$('textarea').val()); }; NewStatusView.prototype.clearInput = function() { this.$('textarea').val(''); }; NewStatusView.prototype.$ = function(selector) { return this.el.find(selector); }; var StatusesView = function(options) { this.el = options.el; events.on('status:add', this.appendStatus, this); }; StatusesView.prototype.appendStatus = function(text) { this.$('ul').append('<li>' + text + '</li>'); }; StatusesView.prototype.$ = function(selector) { return this.el.find(selector); }; $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); new StatusesView({ el: $('#statuses') }); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; var NewStatusView = Backbone.View.extend({ initialize: function(options) { this.statuses = options.statuses; this.el = options.el; events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); this.$('form').submit(add); - } + }, + + addStatus: function(e) { + e.preventDefault(); + + this.statuses.add(this.$('textarea').val()); + }, + + clearInput: function() { + this.$('textarea').val(''); + }, + + $: function(selector) { + return this.el.find(selector); + } }); -NewStatusView.prototype.addStatus = function(e) { - e.preventDefault(); - - this.statuses.add(this.$('textarea').val()); -}; -NewStatusView.prototype.clearInput = function() { - this.$('textarea').val(''); -}; -NewStatusView.prototype.$ = function(selector) { - return this.el.find(selector); -}; -var StatusesView = function(options) { - this.el = options.el; - - events.on('status:add', this.appendStatus, this); -}; -StatusesView.prototype.appendStatus = function(text) { - this.$('ul').append('<li>' + text + '</li>'); -}; -StatusesView.prototype.$ = function(selector) { - return this.el.find(selector); -}; +var StatusesView = Backbone.View.extend({ + initialize: function(options) { + this.el = options.el; + + events.on('status:add', this.appendStatus, this); + }, + + appendStatus: function(text) { + this.$('ul').append('<li>' + text + '</li>'); + }, + + $: function(selector) { + return this.el.find(selector); + } +}); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); new StatusesView({ el: $('#statuses') }); });
var events = _.clone(Backbone.Events); var Statuses = function() { }; Statuses.prototype.add = function(text) { $.ajax({ url: '/status', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('status:add', data.text); } }); }; var NewStatusView = Backbone.View.extend({ initialize: function(options) { this.statuses = options.statuses; - this.el = options.el; events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); this.$('form').submit(add); }, addStatus: function(e) { e.preventDefault(); this.statuses.add(this.$('textarea').val()); }, clearInput: function() { this.$('textarea').val(''); }, - - $: function(selector) { - return this.el.find(selector); - } }); var StatusesView = Backbone.View.extend({ initialize: function(options) { - this.el = options.el; - events.on('status:add', this.appendStatus, this); }, appendStatus: function(text) { this.$('ul').append('<li>' + text + '</li>'); }, - - $: function(selector) { - return this.el.find(selector); - } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); new StatusesView({ el: $('#statuses') }); });
var events = _.clone(Backbone.Events); +var Status = Backbone.Model.extend({ + url: '/status' +}); + var Statuses = function() { }; Statuses.prototype.add = function(text) { - $.ajax({ - url: '/status', - type: 'POST', - dataType: 'json', - data: { text: text }, - success: function(data) { - events.trigger('status:add', data.text); - } - }); + var status = new Status(); + status.save({ text: text }, { + success: function(model, data) { + events.trigger('status:add', data.text); + } + }); }; var NewStatusView = Backbone.View.extend({ initialize: function(options) { this.statuses = options.statuses; events.on('status:add', this.clearInput, this); var add = $.proxy(this.addStatus, this); this.$('form').submit(add); }, addStatus: function(e) { e.preventDefault(); this.statuses.add(this.$('textarea').val()); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ initialize: function(options) { events.on('status:add', this.appendStatus, this); }, appendStatus: function(text) { this.$('ul').append('<li>' + text + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); new StatusesView({ el: $('#statuses') }); });
-var events = _.clone(Backbone.Events); - var Status = Backbone.Model.extend({ url: '/status' }); -var Statuses = function() { -}; -Statuses.prototype.add = function(text) { - var status = new Status(); - status.save({ text: text }, { - success: function(model, data) { - events.trigger("status:add", data.text); - } - }); -}; +var Statuses = Backbone.Collection.extend({ + add: function(text) { + var that = this; + var status = new Status(); + status.save({ text: text }, { + success: function(model, data) { + that.trigger("add", data.text); + } + }); + } +}); var NewStatusView = Backbone.View.extend({ initialize: function(options) { this.statuses = options.statuses; - events.on("status:add", this.clearInput, this); + this.statuses.on("add", this.clearInput, this); var add = $.proxy(this.addStatus, this); this.$('form').submit(add); }, addStatus: function(e) { e.preventDefault(); this.statuses.add(this.$('textarea').val()); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ initialize: function(options) { + this.statuses = options.statuses; + - events.on("status:add", this.appendStatus, this); + this.statuses.on("add", this.appendStatus, this); }, appendStatus: function(text) { this.$('ul').append('<li>' + text + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); - new StatusesView({ el: $('#statuses') }); + new StatusesView({ el: $('#statuses'), statuses: statuses }); });
var Status = Backbone.Model.extend({ url: '/status' }); var Statuses = Backbone.Collection.extend({ - add: function(text) { - var that = this; - var status = new Status(); - status.save({ text: text }, { - success: function(model, data) { - that.trigger("add", data.text); - } - }); - } + model: Status }); var NewStatusView = Backbone.View.extend({ initialize: function(options) { this.statuses = options.statuses; this.statuses.on("add", this.clearInput, this); var add = $.proxy(this.addStatus, this); this.$('form').submit(add); }, addStatus: function(e) { e.preventDefault(); - this.statuses.add(this.$('textarea').val()); + this.statuses.create({ text: this.$('textarea').val() }); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ initialize: function(options) { this.statuses = options.statuses; this.statuses.on("add", this.appendStatus, this); }, - appendStatus: function(text) { + appendStatus: function(status) { - this.$('ul').append('<li>' + text + '</li>'); + this.$('ul').append('<li>' + status.get("text") + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), statuses: statuses }); new StatusesView({ el: $('#statuses'), statuses: statuses }); });
var Status = Backbone.Model.extend({ url: '/status' }); var Statuses = Backbone.Collection.extend({ model: Status }); var NewStatusView = Backbone.View.extend({ - initialize: function(options) { + initialize: function() { - this.statuses = options.statuses; - - this.statuses.on('add', this.clearInput, this); + this.collection.on('add', this.clearInput, this); var add = $.proxy(this.addStatus, this); this.$('form').submit(add); }, addStatus: function(e) { e.preventDefault(); - this.statuses.add({ text: this.$('textarea').val() }); + this.collection.create({ text: this.$('textarea').val() }); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ - initialize: function(options) { + initialize: function() { - this.statuses = options.statuses; - - this.statuses.on('add', this.appendStatus, this); + this.collection.on('add', this.appendStatus, this); }, appendStatus: function(status) { this.$('ul').append('<li>' + status.get('text') + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); - new NewStatusView({ el: $('#new-status'), statuses: statuses }); + new NewStatusView({ el: $('#new-status'), collection: statuses }); - new StatusesView({ el: $('#statuses'), statuses: statuses }); + new StatusesView({ el: $('#statuses'), collection: statuses }); });
var Status = Backbone.Model.extend({ url: '/status' }); var Statuses = Backbone.Collection.extend({ model: Status }); var NewStatusView = Backbone.View.extend({ + events: { + 'submit form': 'addStatus' + }, + initialize: function() { this.collection.on('add', this.clearInput, this); - - var add = $.proxy(this.addStatus, this); - this.$('form').submit(add); }, addStatus: function(e) { e.preventDefault(); this.collection.create({ text: this.$('textarea').val() }); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ initialize: function() { this.collection.on('add', this.appendStatus, this); }, appendStatus: function(status) { this.$('ul').append('<li>' + status.get('text') + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), collection: statuses }); new StatusesView({ el: $('#statuses'), collection: statuses }); });
var Status = Backbone.Model.extend({ url: '/status' }); var Statuses = Backbone.Collection.extend({ model: Status }); var NewStatusView = Backbone.View.extend({ events: { "submit form": "addStatus" }, initialize: function(options) { this.collection.on("add", this.clearInput, this); }, addStatus: function(e) { e.preventDefault(); this.collection.create({ text: this.$('textarea').val() }); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ initialize: function(options) { this.collection.on("add", this.appendStatus, this); }, appendStatus: function(status) { - this.$('ul').append('<li>' + status.get("text") + '</li>'); + this.$('ul').append('<li>' + status.escape("text") + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), collection: statuses }); new StatusesView({ el: $('#statuses'), collection: statuses }); });
var Status = Backbone.Model.extend({ url: '/status' }); var Statuses = Backbone.Collection.extend({ model: Status }); var NewStatusView = Backbone.View.extend({ events: { 'submit form': 'addStatus' }, initialize: function() { this.collection.on('add', this.clearInput, this); }, addStatus: function(e) { e.preventDefault(); this.collection.create({ text: this.$('textarea').val() }); }, clearInput: function() { this.$('textarea').val(''); } }); var StatusesView = Backbone.View.extend({ initialize: function() { this.collection.on('add', this.appendStatus, this); }, appendStatus: function(status) { this.$('ul').append('<li>' + status.escape('text') + '</li>'); } }); $(document).ready(function() { var statuses = new Statuses(); new NewStatusView({ el: $('#new-status'), collection: statuses }); new StatusesView({ el: $('#statuses'), collection: statuses }); });
Source: https://habr.com/ru/post/170563/
All Articles