Gae, рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА, рдЕрдВрдбрд░рд╕реНрдХреЛрд░, рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдЬрд╛рдкрд╛рдиреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдирд╛ рдФрд░ рдирд░рдХ рдХреА рдорджрдж рд╕реЗ рдЬрд╛рдирд┐рдП рдХреНрдпрд╛ рд╣реИ

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ Google рд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдорд╛рдирддреЗ рд╣реИрдВ, рдЕрдиреНрдп рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рд╕рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЧреЗ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдмрд╣реБрдд рдХрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдлреНрд░реА рдХреЛрдЯрд╛ рд╕реЗ рдмрд╛рд╣рд░ рднреА рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рдкрд╛рдиреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдХреА рдПрдХ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореИрдВ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ, рд╕рдлрд▓ рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд╕рд╛рдЗрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрд┐рддреНрд░ рд╕реЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд╣реЗрд▓реА рдмрдирд╛рдиреЗ рдФрд░ рдорд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА:
backbone.js - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ред рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдореБрдлреНрдд рдХреЛрдЯрд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдХреЛрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдореЗрдВ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧ рдкрд╣реЗрд▓реА рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
requirement.js - рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди (js, html) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЖрдк рдЙрди рдХреЛрдб рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЖрджрд░реНрд╢ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 1% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдк js рдлрд╝рд╛рдЗрд▓ рдХреЛ index.html рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред
undescore.js - рд╕рдВрдкреВрд░реНрдг рд╡рд╕реНрддреБ рдпрд╛ рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрд╣рд╛рд░ред рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рд╢рд╛рдВрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк - рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдХрдо - рдареАрдХ рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ? (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рдЦреИрд░ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд╛ - рдХреНрдпрд╛ рдпрд╣ рд╕рдм рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдкрд░ред



рд╡рд╛рд╣ рдпреЗ MVC рд╣реИ !!!


рд╣рдорд╛рд░реЗ рдкреВрд░реЗ MVC рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ: рдореЙрдбрд▓, рд╡реНрдпреВ, рдХрдВрдЯреНрд░реЛрд▓рд░, рдФрд░ рдПрдХ рд░рд╛рдЙрдЯрд░ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред

рд░реВрдЯрд░

рд╣рдорд╛рд░рд╛ рд░рд╛рдЙрдЯрд░ рдХреНрд╡реЗрд░реА рд▓рд╛рдЗрди рдореЗрдВ # рдХреЗ рдмрд╛рдж рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рдбрд┐рдорд╛рдВрдб рдкрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЕрд░реНрдерд╛рдд, рд╕рдм рдХреБрдЫ js рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЬрдм рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдХреЛ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдПрдХ рдЯреНрд░рд┐рдкрд▓ рд╡рд┐рд▓рдВрдм рдерд╛:

рдкреНрд░реА-рд▓реЛрдбрд┐рдВрдЧ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░, рд╡реИрд╕реЗ, рдореЙрдбрд▓ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рджреЛ рджреЗрд░реА рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЦреИрд░, рдЕрдВрддрд┐рдо рджреЗрд░реА рд╕реЗ рдХреЛрдИ рдмрдЪ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ (рдареАрдХ рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдХреЛ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЛрдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдпрд╛ред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдореЗрдиреВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдЙрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
require ( [ //        DOM ,  $(document).ready 'backbone/domReady', //   'backbone/views/menu', 'backbone/views/start', 'backbone/views/create', 'backbone/views/image', 'backbone/views/view_puzzle', 'backbone/views/list', 'backbone/views/mylist', 'backbone/views/search', 'backbone/views/edit_puzzle', ], function(domReady, MenuView, StartView, CreateView, ImageView, PuzzleViewView, ListView, MyListView, SearchView, EditPuzzleView){ domReady(function () { //       var menu = new MenuView(); menu.render(); var Router = Backbone.Router.extend({ //        , //        routes: { "": "start", "!/": "start", "!/create": "create", "!/image": "image", "!/list": "list", "!/list/:page": "list", "!/search/:query": "search", "!/search/:query/:page": "search", "!/mylist": "mylist", "!/mylist/:page": "mylist", "!/puzzle/:id": "view_puzzle", "!/puzzle/edit/:id": "edit_puzzle" }, start: function () { this.show_view(StartView, 'start'); }, create: function () { this.show_view(CreateView, 'create'); }, image: function () { this.show_view(ImageView, 'image'); }, view_puzzle: function(id) { this.show_view(PuzzleViewView, '', id); }, edit_puzzle: function(id) { this.show_view(EditPuzzleView, '', id); }, search: function(query, page) { this.show_view(SearchView, '', query, page); }, list: function(page) { this.show_view(ListView, 'list', page); }, mylist: function(page) { this.show_view(MyListView, 'mylist', page); }, show_spinner: function() { menu.show_spinner(); }, hide_spinner: function() { menu.hide_spinner(); }, show_view: function(View, view_name, arg1, arg2) { this.current_view = new View(arg1, arg2); $('.navbar li').removeClass('active'); if (view_name) { $('#'+view_name+'_item').addClass('active'); } this.current_view.render(); } }); window.router = new Router(); Backbone.history.start(); }); }); 


рдирд┐рдпрдВрддреНрд░рдХ

рдирд┐рдпрдВрддреНрд░рдХ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдХреА рддрд░рд╣, рдХреА рд╢реИрд▓реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 define(['backbone/text!backbone/templates/start.html'], function(template){ var StartView = Backbone.View.extend({ el: "#block", template: _.template(template), //       #block render: function () { //      var data = {}; $(this.el).html(this.template(data)); } }); return StartView; }); 

рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рд╡рд╛рдкрд╕реА рдорд╛рди рд╕рдВрд╕рд╛рдзрди рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рд╣реИред рдЕрдЬреАрдм рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмреИрдХрдмреЛрди / рдЯреЗрдХреНрд╕реНрдЯ! рдмреИрдХрдмреЛрди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд╕реНрдЯрд╛рд░реНрдЯред Html рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рд╕рд░реНрд╡рд░ рд╕реЗ рддреБрд░рдВрдд рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╛рда рдкреНрд▓рдЧрдЗрди рдХреА рдорджрдж рд╕реЗред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
  1. рдкрд╛рда - рд╕рд░реНрд╡рд░ рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреЛрдИ рднрд╛рд░ рдирд╣реАрдВред рд╡реИрд╕реЗ, рдореБрдХреНрдд рдХреЛрдЯрд╛ рдореЗрдВ, рд╡рд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реИ (рдпрджрд┐)
  2. i18n - рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  3. рдбреЛрдорд░реА - рдбреЛрдо рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред


рдЖрджрд░реНрд╢

рдХреЗрд╡рд▓ рдПрдХ рдореЙрдбрд▓ рд╣реИ - рдпрд╣ рдЬрд╛рдкрд╛рдиреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА (рдкрд╣реЗрд▓реА) рдХрд╛ рдореЙрдбрд▓ рд╣реИ, рдЗрд╕рдореЗрдВ рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ, рдбреЗрдЯрд╛, user_data, рд╢реАрд░реНрд╖рдХ рдЬреИрд╕реЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред рд╕реЗрд╡рд╛ рди рдХреЗрд╡рд▓ рддреИрдпрд╛рд░ рдкрд╣реЗрд▓реА рдкрд╣реЗрд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреВрдареЗ рднреА рдмрдирд╛ рд░рд╣реА рд╣реИред рдореЙрдбрд▓ рдХреЛ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 define (function(){ var Puzzle = Backbone.Model.extend({ urlRoot : '/puzzle/', defaults: { title: '', width: 5, height: 5 }, //       , ... }); return Puzzle; }); 


рд░рд╛рдп

рджреГрд╢реНрдп рд╕рдмрд╕реЗ рдЖрдо HTML рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 <div id="data"><%= data %></div> 

рдФрд░ <%%> рдЯреИрдЧ рдореЗрдВ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢рд░реНрддреЗрдВ:
 <% if (loaded) { %> <div></div> <% } else { %> <div>...</div> <% } %> 

рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдбреЗрдЯрд╛ рджреГрд╢реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 var data = { 'loaded': true }; $(this.el).html(this.template(data)); 


рдЕрдиреБрдХреВрд▓рди

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╣рд▓реЗ рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рджреВрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП node.js рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рди рдХрд╛рд░реНрдпрдХреНрд░рдо js рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдБ рдФрд░ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

build.js
 ({ baseUrl: "../cross/static/js", name: "common", out: "../cross/static/js/common-pro.js" }) 

рдФрд░ рд╣рдорд╛рд░реЗ рдмрд┐рд▓реНрдбрд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
node r.js -o build.js


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рд╕рднреА рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ (рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, рд╡рд┐рдЪрд╛рд░, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝рд╛рдЗрд▓реЗрдВ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ ред

Google рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдХреА рдПрдХреАрдХрд░рдг

рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдЕрдЧрд░ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд▓реЛрдб рджреЗрдЦреЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЬреА рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреЛрдб рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдкрд╣рд▓рд╛ рдЦрд╛рддрд╛ рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреЗрдЬ рд▓реЛрдбрд┐рдВрдЧ рдЦреАрдВрдЪрддрд╛ рд╣реИред

рдкрд╣рд▓рд╛ рднрд╛рдЧ:
  var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA--']); (function () { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); 


рднрд╛рдЧ 2, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд░рд╛рдЙрдЯрд░ рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ (show_view) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдмрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
  _gaq.push(['_trackPageview', document.location.href]); 


рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб


рдХреБрдЫ рддрдереНрдп:
  1. Ndb рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Gae рд╕рд╣рд╛рдпрддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрдИ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдПрдХ рдХреНрд╡реЗрд░реА рдореЗрдВ рдХреИрд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ рдореЗрдВ рдХрд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреИрд╢ рд╣реИред
  2. рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЬрд╕рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
  3. рдПрдХ рдЫреЛрдЯреА рд╕реА рдЦреЛрдЬ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдПрдХ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд╣ рдЕрдВрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд╣реЗрдбрд░ рд╕реЗ рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реВрдЪреА рд░рдЦреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдо рдЖрдП рдЬреЛ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ):

     class PuzzleIndex(db.Model): keywords = db.StringProperty(repeated=True) update_date = db.DateTimeProperty(auto_now=True) @classmethod def index(cls, puzzle): index = PuzzleIndex.get_or_insert(str(puzzle.key.id())) index.keywords = cls.stemming(puzzle.title) index.put() @classmethod def delete_index(cls, puzzle): db.Key(PuzzleIndex, str(puzzle.key.id())).delete() @classmethod def stemming(cls, text): words = set(re.split(ur'\s+', text.lower(), re.U)) return list(filter(None, words)) @classmethod def search(cls, text, limit=10, offset=0): puzzles = [] words = cls.stemming(text) query = PuzzleIndex.query()\ .order(-PuzzleIndex.update_date)\ .filter(PuzzleIndex.keywords.IN(words)) indexes = query.fetch(limit + 1, offset=offset, keys_only=True) if len(indexes): keys = [db.Key(Puzzle, int(key.id())) for key in indexes] puzzles = db.get_multi(keys) return puzzles 



рдзрдиреНрдпрд╡рд╛рдж


рд▓реЗрдЖрдЙрдЯ рдФрд░ рд▓реЛрдЧреЛ рдХреЗ рд▓рд┐рдП рдорджрдж рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреЛрд╕реНрдд рд░реЗрдиреБрдо рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ Gae рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рдлреА рд╕рд╕реНрддреА рд╣реЛ рдФрд░ рд╕рд╛рде рд╣реА рдЧреИрд░-рд╢реВрдиреНрдп рдЯреНрд░реИрдлрд╝рд┐рдХ рд╣реЛред

Source: https://habr.com/ru/post/In139741/


All Articles