0.6 рдШрдЯрдХреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп

рдЫрд╡рд┐

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд░реНрдмреАрдЬ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ ( рдПрдХ , рджреЛ , рддреАрди , рдЪрд╛рд░ ) рдкрджреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ (рд╣реИрдВрдЧрд░ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдирд╛рд▓реЙрдЧ) - рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рднрд╛рдЬрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИред



рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдЬрд╛рдирдХрд╛рд░реА



рдбрд░реНрдмреА 0.6 рдореЗрдВ рдЕрд╡рдпрд╡реЛрдВ рдХреЛ рдбрд░реНрдмреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рджрд╛рдпрд░реЗ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓реЛ рдареАрдХ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рджреГрд╢реНрдп-рдлрд╝рд╛рдЗрд▓ рд╣реИ (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд╕реА рдЯреЛрдбреЛ-рд╕реВрдЪреА рдХреЛ рдЪреБрдирд╛ рд╣реИ - рдЯреЛрдбреЛ-рд╕реАрд╡реАрд╕реА рд╕реЗ рдЯреВ-рдбреВ рд╕реВрдЪреА):



index.html

<Body:> <h1>Todos:</h1> <view name="new-todo"></view> <!--    --> <new-todo:> <form> <input type="text"> <button type="submit">Add Todo</button> </form>
      
      







рджреЛрдиреЛрдВ рдирд┐рдХрд╛рдп: рдФрд░ рдирдпрд╛-рдЯреВрдбреВ: рдпрд╣рд╛рдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИрдВ, рдирдП-рдЯреВрдбреЛ рдХреЛ рдПрдХ рдШрдЯрдХ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдбрд░реНрдмреА рдЖрд╡реЗрджрди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:

 app.component('new-todo', function(){});
      
      





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



рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЛ рдмрд╛рдВрдзреЗрдВ рдФрд░ рдПрдХ рдСрди-рд╕рдмрдорд┐рдЯ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдВред рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдХреИрд╕реЗ рд╣реЛрдЧрд╛:

 <new-todo:> <form on-submit="addNewTodo()"> <input type="text" value="{{_page.new-todo}}"> <button type="submit">Add Todo</button> </form>
      
      







 app.proto.addNewTodo = function(){ //... }
      
      





рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:

1. рднрд░рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░рд╛ (_page)

2. addNewTodo рдлрд╝рдВрдХреНрд╢рди рдХреЛ app.proto рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдиреВрдбрд▓реНрд╕ рд╣реЛрдЧрд╛ред



рдпрджрд┐ рдЖрдк рдирдП-рдЯреВрдбреЛ рдХреЛ рдПрдХ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреИрд╕реЗ рд╣реЛрдЧрд╛:

 <new-todo:> <form on-submit="addNewTodo()"> <input type="text" value="{{todo}}"> <button type="submit">Add Todo</button> </form>
      
      





 app.component('new-todo', NewTodo); function NewTodo(){} NewTodo.prototype.addNewTodo = function(todo){ //     "scoped" //     ,   var todo = this.model.get('todo'); //... }
      
      





рддреЛ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирдП-рдЯреВрдбреВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░: рдЕрдм рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рд╣реИ, _page рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЯреВрдбреВ рдорд╛рд░реНрдЧ рдпрд╣рд╛рдВ рд╕реНрдерд╛рдиреАрдп рд╣реИ, рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдпрд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рджреВрд╕рд░реЗ, addNewTodo рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдЕрдм рдЕрдкрдиреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдРрдк рдХреЛ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ рдиреНрдпреВрдЯреЛрдбреЛ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рднреА рд╣реИред



рддреЛ, рдбрд░реНрдмреА-рдШрдЯрдХ рдпреВрдЖрдИ-рддрддреНрд╡ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдЗрдХрд╛рдИ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдШрдЯрдХ рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рди рдХрд░реЗрдВред рдбреЗрдЯрд╛ рдХреЛ рдЙрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕реНрддрд░ рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ url рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред



рдпрджрд┐ рдШрдЯрдХреЛрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░рд╕реЛрдИ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ? рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ?



рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕реА рддрд░рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб HTML рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ (рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ)ред рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред



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



index.html

 <Body:> <h1>Todos:</h1> <view name="new-todo" plaeholder="Input new Todo" inputClass="big" on-addtodo="list.add()"> </view> <view name="todos-list" as="list"></view> <new-todo:> <form on-submit="addNewTodo()"> <input type="text" value="{{todo}}" placeholder="{{@plaeholder}}" class="{{@inputClass}}"> <button type="submit">Add Todo</button> </form> <todos-list:> <!--    -->
      
      





 app.component('new-todo', NewTodo); app.component('todos-list:', TodosList); function NewTodo(){} NewTodo.prototype.addNewTodo = function(todo){ var todo = this.model.get('todo'); //  ,     // (   ) this.emit('addtodo', todo); } function TodosList(){}; TodosList.prototype.add = function(todo){ //        //  .  ,   //       //    }
      
      





рдЖрдЗрдП рдЗрд╕ рд╕рдм рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред



рд╣рдорд╛рд░рд╛ рдирдпрд╛-todo рдШрдЯрдХ рдЕрдм 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдФрд░ inputClass рдФрд░ "addtodo" рдИрд╡реЗрдВрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╣рдо рдЯреЙрдбреЛрд╕-рд▓рд┐рд╕реНрдЯ рдШрдЯрдХ рдХреЛ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдореЗрдВ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ TodosList.prototyp.add рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЯреЙрдбреЛрд╕-рд▓рд┐рд╕реНрдЯ рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдордиреЗ рдЗрд╕реЗ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЙрдкрдирд╛рдо рд╕реВрдЪреА рд╕реМрдВрдкреАред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдб-рдПрдбреНрдЯреЛ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╣рдо list.add () рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдпрд╛-рдЯреВрдбреВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИ рдФрд░ рдмрд╛рд╣рд░реА рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реА рддрд░рдл, рдЯреЙрдбреЛрд╕-рд▓рд┐рд╕реНрдЯ рдШрдЯрдХ рдЯреЙрдбреЛрд╕ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдмрд╛рдВрдЯрд╛ рдЧрдпрд╛ рд╣реИред



рдЕрдм рдШрдЯрдХ рдХреЛ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЙрдЪрд┐рдд рд╣реИред



рдШрдЯрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕



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



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



# рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдШрдЯрдХ) рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреНрдпрд╛ рд╣реИ


 <name: ([element="element"] [attributes="attributes"] [arrays="arrays"])>
      
      





рддрддреНрд╡, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рд╕рд░рдгреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред рдЙрдирдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



рддрддреНрд╡ рдЧреБрдг


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдШреЛрд╖рдгрд╛ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЙрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:

(рдЧрд┐рд░рдлреНрддрд╛рд░ рд╣реЛрдиреЗ рддрдХ)



 <!--   --> <nav-link:> <!--  $render.url   url  --> <li class="{{if $render.url === @href}}active{{/}}"> <a href="{{@href}}">{{@caption}}</a> </li> <!--     ,   Body: --> <view name="nav-link" href="/" caption="Home"></view>
      
      







рдРрд╕рд╛ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдореИрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдо рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреИрдЧ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддрддреНрд╡ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИред



 <!--  ,       nav-link --> <nav-link: element="nav-link"> <li class="{{if $render.url === @href}}active{{/}}"> <a href="{{@href}}">{{@caption}}</a> </li> <!--  nav-link   ,   Body: --> <nav-link href="/" caption="Home"></nav-link>
      
      







рдХреНрдпрд╛ рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ

 <nav-link href="/" caption="Home"/>
      
      





рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЯреИрдЧ рдХреЗ рд╕рдорд╛рдкрди рднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреНрдпрд╛ рд╣реИ?



рдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╛рдордЧреНрд░реА




рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╡реНрдпреВ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рддрддреНрд╡ рдирд╛рдо рд╡рд╛рд▓рд╛ рдЯреИрдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:



 <!--  --> <view name="nav-link" href="/" caption="Home"></view> <!--   --> <nav-link name="nav-link" href="/" caption="Home"></nav-link> <!--   --> <nav-link: element="nav-link"> <li class="{{if $render.url === @href}}active{{/}}"> <a href="{{@href}}">{{@caption}}</a> </li>
      
      







рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрдм рдЯреИрдЧ рдХреЗ рдЙрджреНрдШрд╛рдЯрди рдФрд░ рд╕рдорд╛рдкрди рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдПрдореНрдмреЗрдбреЗрдб HTMLред рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреИрдкреНрд╢рди рдХреЛ рдмрджрд▓реЗрдВ:



 <!--  --> <view name="nav-link" href="/">Home</view> <!--   --> <nav-link name="nav-link" href="/">Home</nav-link> <!--    --> <nav-link name="nav-link" href="/"> <span class="img image-home"> Home </span> </nav-link> <!--   --> <nav-link: element="nav-link"> <li class="{{if $render.url === @href}}active{{/}}"> <a href="{{@href}}">{{@content}}</a> </li>
      
      







рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рд╡рд░рдг рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рд╕рд░рдгрд┐рдпрд╛рдБ рд╕реАрдзреЗ рдЗрд╕реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред



рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ


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

 <widget> <header><--  --></header> <footer><--  --></footer> <body><--  --></body> </widget>
      
      





рдФрд░ рд╡рд┐рдЬреЗрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдорд╛рд░реНрдХрдЕрдк рд╣реЛрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рд╣реЗрдбрд░ , рдлреБрдЯрд░ рдФрд░ рдмреЙрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрди рд╕рднреА 3 рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред



рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 <widget: attributes="header footer body"> <!--   --> <!--   --> {{@header}} <!--   --> <!--   --> {{@body}} <!--   --> {{@footer}} <!--   -->
      
      





рд╡реИрд╕реЗ, рд╢рд░реАрд░ рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ) рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ:



 <Body:> <widget> <h1>Hello<h1> <header><--  --></header> <footer><--  --></footer> <p>text</text> </widget> <widget: attributes="header footer"> <!--   --> <!--   --> {{@header}} <!--   --> <!--   --> {{@content}} <!--    h1  p --> <!--   --> {{@footer}} <!--   -->
      
      





рдпрд╣рд╛рдВ рдПрдХ рд╕реАрдорд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рднреА рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрдВрддрд░рд┐рдХ рдмреНрд▓реЙрдХ (рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд) рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдФрд░ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?



рдПрд░реЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛




рд╣рдо рдЕрдкрдиреА рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрд╕ рддрд░рд╣ рд╕реЗ рддрд░реНрдХ рд▓реЗ:



 <dropdown> <option></option> <option class="bold"></option> <option></option> </dropdown>
      
      





рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рдЕрдВрджрд░ рдорд╛рд░реНрдХрдЕрдк рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрд╕ рд╕рд╛рдордЧреНрд░реА рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧреАред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕реАрдорд╛ рд╣реИ - рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдХрд▓реНрдк рддрддреНрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгрд┐рдпреЛрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛:



 <dropdown: arrays="option/options"> <!--   --> {{each @options}} <li class="{{this.class}}"> {{this.content}} </li> {{}} <!--   -->
      
      







рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрд╛, 'рд╕рд░рдгрд┐рдпрд╛рдБ = "рд╡рд┐рдХрд▓реНрдк / рд╡рд┐рдХрд▓реНрдк" рд╕реЗрдЯ рд╣реИ - рдпрд╣рд╛рдБ рджреЛ рдирд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВ:



1. рд╡рд┐рдХрд▓реНрдк - рдпрд╣ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рдЕрдВрджрд░ html рддрддреНрд╡ рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

2. рд╡рд┐рдХрд▓реНрдк - рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рд╕рд░рдгреА рдХреЗ рдЕрдВрджрд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рднреА рдЧреБрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдмрди рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдордЧреНрд░реА рдлрд╝реАрд▓реНрдб рдмрди рдЬрд╛рдПрдЧреАред



рдШрдЯрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рдПрдХ рдШрдЯрдХ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рд░рдЪрдирд╛рдХрд╛рд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╣реЛред



 <new-todo:> <form on-submit="addNewTodo()"> <input type="text" value="{{todo}}"> <button type="submit">Add Todo</button> </form>
      
      





 app.component('new-todo', NewTodo); function NewTodo(){} NewTodo.prototype.addNewTodo = function(todo){ var todo = this.model.get('todo'); //... }
      
      







рдШрдЯрдХ рдХреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдШрдЯрдХ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдФрд░ init рд╣реИ, рдПрдХ 'рдирд╖реНрдЯ' рдШрдЯрдирд╛ рднреА рд╣реИред рдпрд╣ рднреА рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реИред



# init


рдШрдЯрдХ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рджреЛрдиреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдШрдЯрдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдореЙрдбрд▓ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рд▓рд┐рдВрдХ (рд░реЗрдлрд░реА) рдмрдирд╛рдирд╛ рд╣реИред



 //   https://github.com/codeparty/d-d3-barchart/blob/master/index.js function BarChart() {} BarChart.prototype.init = function() { var model = this.model; model.setNull("data", []); model.setNull("width", 200); model.setNull("height", 100); // ... };
      
      







# рдмрдирд╛рдПрдВ


рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реЗ рдЬреЛрдбрд╝рдирд╛, рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛, рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдлрдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЖрджрд┐ред

 BarChart.prototype.create = function() { var model = this.model; var that = this; // changes in values inside the array model.on("all", "data**", function() { //console.log("event data:", arguments); that.transform() that.draw() }); that.draw(); };
      
      







# рдШрдЯрдирд╛ 'рдирд╖реНрдЯ'




рдШрдЯрдХ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ: рд╕реЗрдЯ-рдЗрдиреНрдЯрд░рд╡рд▓, рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛, рдЖрджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ред

 MyComponent.prototype.create = function(){ var intervalId = setIterval myFunc, 1000 this.on('destroy', function(){ clearInterval(intervalId); }); }
      
      







рдШрдЯрдХ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдореЗрдВ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ?





рдЗрд╕рдореЗрдВ рд╕рднреА рдШрдЯрдХ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдирд┐рдореНрди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: рдореЙрдбрд▓, рдРрдк, рдбреЛрдо (init рдХреЛ рдЫреЛрдбрд╝рдХрд░), рд╕рднреА рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдЯреВ рдбреЛрдо рдПрд▓рд┐рдореЗрдВрдЯреНрд╕, рдФрд░ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ, рдкреИрд░реЗрдВрдЯ-рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреИрд░реЗрдВрдЯ-рд░реЗрдлрд░реЗрдВрд╕, рдЦреИрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рд╣рдо рдЗрд╕рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдШрдЯрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкред



рдореЙрдбрд▓ рдпрд╣рд╛рдВ рдПрдХ рджрд┐рдП рдЧрдП рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕.model рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдШрдЯрдХ рдХреЗрд╡рд▓ рдШрдЯрдХ рдХреЗ рдореЙрдбрд▓ рдХреЛ рд╣реА рджреЗрдЦреЗрдЧрд╛, рдЕрдЧрд░ рдЖрдкрдХреЛ derby рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ this.model.root, рдпрд╛ this.app.model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдПрдХ рдбрд░реНрдмреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



 MyComponent.prototype.back = function(){ this.app.history.back(); }
      
      







рдбреЛрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рд╣реИрдВрдбрд▓рд░ рдХреЛ DOM рдЗрд╡реЗрдВрдЯреНрд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░, рд░рд┐рдореВрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 //  https://github.com/codeparty/d-bootstrap/blob/master/dropdown/index.js Dropdown.prototype.create = function(model, dom) { // Close on click outside of the dropdown var dropdown = this; dom.on('click', function(e) { if (dropdown.toggleButton.contains(e.target)) return; if (dropdown.menu.contains(e.target)) return; model.set('open', false); }); };
      
      







рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ this.toggleButton рдФрд░ this.menu DOM рдХреЗ рд▓рд┐рдП рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рд╣реИрдВ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ:



рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: github.com/codeparty/d-bootstrap/blob/master/dropdown/index.html#L4-L11



рд╕рднреА рдбреЛрдо: рдПрдХ рдмрд╛рд░, рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЪрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ: рдкреНрд░рдХрд╛рд░, [рд▓рдХреНрд╖реНрдп], рд╢реНрд░реЛрддрд╛, [рдЙрдкрдпреЛрдЧ]ред рд▓рдХреНрд╖реНрдп - рд╡рд╣ рддрддреНрд╡ рдЬрд┐рд╕ рдкрд░ рд╣реИрдВрдбрд▓рд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ); рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╢реЗрд╖ 3 рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╛рдорд╛рдиреНрдп addEventListener (рдкреНрд░рдХрд╛рд░, рд╢реНрд░реЛрддрд╛ [, useCapture]) рдХреЗ рд╕рдВрдЧрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред



рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдЗрд╕ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:



 <main-menu:> <div as="menu"> <!-- ... --> </div>
      
      







 MainMenu.prototype.hide = function(){ //   $(this.menu).hide(); }
      
      







рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ





рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдЙрди рдШрдЯрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд┐рдирдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд┐рд╕реА рднреА HTML-рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдереЗред рдпрджрд┐ рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рд╕реЗ рдШрдЯрдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЗрдПрд╕, рдПрдЪрдЯреАрдПрдордПрд▓, рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЗрдВ рдЗрд╕рдореЗрдВ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВ (рд╢реИрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ), рдШрдЯрдХ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ app.component рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рдиред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:



app.component (рдЖрд╡рд╢реНрдпрдХрддрд╛ ('../ рдШрдЯрдХреЛрдВ / рдбреНрд░реЙрдкрдбрд╛рдЙрди));



рдзреНрдпрд╛рди рджреЗрдВ, рдкрд╣рд▓реЗ, рдЬрдм рдШрдЯрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ html-files рдореЗрдВ рдореМрдЬреВрдж рдерд╛, рддреЛ рдкрдВрдЬреАрдХрд░рдг рдЕрд▓рдЧ рдерд╛:



app.component ('рдбреНрд░реЙрдкрдбрд╛рдЙрди', рдбреНрд░реЙрдкрдбрд╛рдЙрди);



рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:



tabs / index.js

 module.exports = Tabs; function Tabs() {} Tabs.prototype.view = __dirname; Tabs.prototype.init = function(model) { model.setNull('selectedIndex', 0); }; Tabs.prototype.select = function(index) { this.model.set('selectedIndex', index); };
      
      





tabs / index.html

 <index: arrays="pane/panes" element="tabs"> <ul class="nav nav-tabs"> {{each @panes as #pane, #i}} <li class="{{if selectedIndex === #i}}active{{/if}}"> <a on-click="select(#i)">{{#pane.title}}</a> </li> {{/each}} </ul> <div class="tab-content"> {{each @panes as #pane, #i}} <div class="tab-pane{{if selectedIndex === #i}} active{{/if}}"> {{#pane.content}} </div> {{/each}} </div>
      
      







рд▓рд╛рдЗрди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВ:

 Tabs.prototype.view = __dirname;
      
      





рдпрд╣рд╛рдВ рд╕реЗ, рдбрд░реНрдмреА рдШрдЯрдХ рдХрд╛ рдирд╛рдо рд▓реЗрдЧрд╛ (рдпрд╣ рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╣реА рдЧрд╛рдпрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 'рдЗрдВрдбреЗрдХреНрд╕:' рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рд░рд▓ рд╣реИ - рдкрде рдХрд╛ рдЕрдВрддрд┐рдо рдЦрдВрдб рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ _dirname рдЕрдм '/ home / zag2art / work / project / src / Components / tabs' рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЗрд╕ рдШрдЯрдХ рдХреЛ 'tab' рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 <Body:> <tabs selected-index="{{widgets.data.currentTab}}"> <pane title="One"> Stuff'n </pane> <pane title="Two"> More stuff </pane> </tabs>
      
      





рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдз рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

 app.component(require('../components/tabs'));
      
      





рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ npm рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, www.npmjs.org/package/d-d3-barchart



All Articles