
ãªã¢ã¯ãã£ããã«ã¹ã¿ãã¯javascript derbyjsãã¬ãŒã ã¯ãŒã¯ã«é¢ããäžé£ã®ïŒ 1ã2ã3ã4 ïŒæçš¿ãç¶ããŸãã ä»åã¯ã³ã³ããŒãã³ãïŒæ ŒçŽåº«ã®ãã£ã¬ã¯ãã£ãã®ç¹å®ã®é¡äŒŒç©ïŒ-ã€ã³ã¿ãŒãã§ãŒã¹ãéå±€çã«æ§ç¯ããã¢ããªã±ãŒã·ã§ã³ãã¢ãžã¥ãŒã«ã«åå²ããåªããæ¹æ³ã«ã€ããŠèª¬æããŸãã
äžè¬çãªã³ã³ããŒãã³ãæ å ±
Derby 0.6ã®ã³ã³ããŒãã³ãã¯ãå¥ã®ã¹ã³ãŒãã«é 眮ãããããŒããŒãã¿ãŒã³ã§ãã æ£ããããŸãããã ãã®ãããªãã¥ãŒãã¡ã€ã«ããããšããŸãïŒãã¢ã§ã¯ãåãTodoãªã¹ã-TodoMVCã®To Doãªã¹ããéžæããŸããïŒã
index.html
<Body:> <h1>Todos:</h1> <view name="new-todo"></view> <!-- --> <new-todo:> <form> <input type="text"> <button type="submit">Add Todo</button> </form>
BodyïŒãšnew-todoã®äž¡æ¹ïŒãã³ãã¬ãŒãããããŸããnew-todoãã³ã³ããŒãã³ãã«ããæ¹æ³ã¯ïŒ ãããè¡ãã«ã¯ãããŒããŒã¢ããªã±ãŒã·ã§ã³ã«ç»é²ããŸãã
app.component('new-todo', function(){});
ã€ãŸãããã³ãã¬ãŒããããããæ åœããç¹å®ã®æ©èœãšäžèŽãããããšã§ãã ã©ããåçŽã§ã¯ãããŸããïŒäŸã¯ãŸã å®å šã«åœ¹ã«ç«ããªãïŒã ãããããã®æ©èœã¯äœã§ããïŒ ãåç¥ã®ããã«ãjavascriptã®é¢æ°ã¯ã¯ã©ã¹ãå®çŸ©ã§ããŸãã ã¯ã©ã¹ã¡ãœããã¯ãããã¿ã€ãã«é 眮ãããŸããããã¯ããã§äœ¿çšãããŸãã
ãã®äŸãå°ãæ¡åŒµããŠãå ¥åããªã¢ã¯ãã£ãå€æ°ã«ãã€ã³ãããéä¿¡æã€ãã³ããã³ãã©ãŒãäœæããŸãããã æåã«ãã³ã³ããŒãã³ãããªãã£ãå Žåã®ç¶æ ãèŠãŠã¿ãŸãããã
<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ãã³ã³ããŒãã³ãã«ãããšã©ããªããŸããïŒ
<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'); //... }
ããã§ãäœãå€ãã£ãã®ã§ããããïŒ ãŸããnew-todoãã³ãã¬ãŒãå ïŒç¬èªã®ã¹ã³ãŒãã_pageãæã¡ãä»ã®ãã¹ãŠã®ã°ããŒãã«ã³ã¬ã¯ã·ã§ã³ã¯ããã«è¡šç€ºãããŸããã éã«ãtodoãã¹ã¯ããã§ã¯ããŒã«ã«ã§ãããã°ããŒãã«ã¹ã³ãŒãã§ã¯äœ¿çšã§ããŸããã ã«ãã»ã«åã¯çŽ æŽãããã§ãã 第äºã«ãaddNewTodoãã³ãã©ãŒé¢æ°ã¯ãNewTodoã¯ã©ã¹å ã«ããããã¢ããªã®è©³çŽ°ãè©°ãŸãããšã¯ãããŸããã
ãããã£ãŠãããŒããŒã³ã³ããŒãã³ãã¯UIèŠçŽ ã§ããããã®ç®çã¯ç¹å®ã®èŠèŠãŠãããã®å éšã®è©³çŽ°ãé ãããšã§ãã ããã§æ³šæãã䟡å€ããããã³ã³ããŒãã³ããããŒã¿ã®èªã¿èŸŒã¿ãæå³ããªãããšãéèŠã§ãã ããŒã¿ã¯ãurlãåŠçããã³ã³ãããŒã©ãŒã®ã¬ãã«ã§ããŒãããå¿ èŠããããŸãã
ã³ã³ããŒãã³ããå éšãããã³ãé ãããã«èšèšãããŠããå Žåãã©ã®ãããªã€ã³ã¿ãŒãã§ã€ã¹ããããŸããïŒ ãã©ã¡ãŒã¿ã¯ã©ã®ããã«æž¡ãããçµæãåŸãããŸããïŒ
ãã©ã¡ãŒã¿ã¯ãéåžžã®ãã³ãã¬ãŒããšåãæ¹æ³ã§ãå±æ§ãä»ããŠããŸãåã蟌ã¿htmlã³ã³ãã³ãã®åœ¢åŒã§è»¢éãããŸãïŒããã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã çµæã¯ã€ãã³ãã䜿çšããŠè¿ãããŸãã
ãã®äŸã®å°ããªãã¢ã å ¥åãã£ãŒã«ãã®ã¯ã©ã¹ãšãã¬ãŒã¹ãã«ããŒãnew-todoã³ã³ããŒãã³ãã«æž¡ããŠãå ¥åãããå€ãã€ãã³ãã§åãåããŸãã
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ã³ã³ããŒãã³ãã¯ããã¬ãŒã¹ãã«ããŒãšinputClassã®2ã€ã®ãã©ã¡ãŒã¿ãŒãåãããaddtodoãã€ãã³ããè¿ããŸããtodos-listã³ã³ããŒãã³ãããã®ã€ãã³ãã«ãªãã€ã¬ã¯ãããTodosList.prototype.addãåŠçããŸãã todos-listã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããšãã«ãasããŒã¯ãŒãã䜿çšããŠãšã€ãªã¢ã¹ãªã¹ããå²ãåœãŠãããšã«æ³šæããŠãã ããã ãã®ãããon-addtodoãã³ãã©ãŒã§list.addïŒïŒãèšè¿°ã§ããŸããã
ãããã£ãŠãnew-todoã¯å®å šã«åé¢ãããå€éšã¢ãã«ã§ã¯æ©èœããŸãããäžæ¹ãtodos-listã³ã³ããŒãã³ãã¯todosãªã¹ããå®å šã«æ åœããŸãã 責任ã¯å³å¯ã«åããããŸãã
ããã§ãã³ã³ããŒãã³ãã«æž¡ããããã©ã¡ãŒã¿ãŒã«ã€ããŠããã«è©³ãã説æãã䟡å€ããããŸãã
ã³ã³ããŒãã³ãã€ã³ã¿ãŒãã§ãŒã¹
ãã³ãã¬ãŒãããã³ã³ããŒãã³ããžã®ãã©ã¡ãŒã¿ãŒã®è»¢éãç¶æ¿ããŠãããããã»ãšãã©ã®æ©èœã¯é¡äŒŒããŠããããšã«æ³šæããŠãã ããïŒç¹ã«æèšããªãéãããã³ãã¬ãŒãã®äŸã瀺ããŸãïŒã
ããŒããŒ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>
ãããè¡ãããšã¯å¿ ããã䟿å©ã§ã¯ãããŸããã æã ã察å¿ããååã®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ã¿ã°ããŸãã¯æ¬¡ã®ãããªelementå±æ§ã§ååãä»ããããã¿ã°ã䜿çšããŸãã
<!-- --> <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ãªã©ã®ã³ã³ãã³ããé 眮ã§ããããšãããããŸãã æé»çãªãã©ã¡ãŒã¿ãŒcontentã«ãã£ãŠãã³ãã¬ãŒãå ã«æž¡ãããŸãã contentã䜿çšããŠããã®äŸã®ãã£ãã·ã§ã³ã眮ãæããŸãããïŒ
<!-- --> <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}} <!-- -->
ããã«ã¯1ã€ã®å¶éããããŸããå±æ§ã«ãªã¹ããããã®ã¯ãã¹ãŠãå éšãããã¯ïŒãã³ãã¬ãŒãã«æ¿å ¥ãããïŒã§1åã ãçºçããŸãã ããããããã«å¿ èŠãªå Žåã¯ã©ãã§ããããïŒ ããšãã°ãããããããŠã³ãªã¹ããšãªã¹ãã¢ã€ãã ã®ç¬èªã®å®è£ ãäœæãããå Žåã¯ããããããããŸããïŒ
é åå±æ§
ããããããŠã³ãªã¹ããäœæããçµæã®ãã³ãã¬ãŒãã次ã®ãããªåŒæ°ãåãããã«ããŸãã
<dropdown> <option></option> <option class="bold"></option> <option></option> </dropdown>
ããããããŠã³å ã®ããŒã¯ã¢ããã¯éåžžã«è€éã«ãªããŸããã€ãŸããåã«ã³ã³ãã³ããç§ãã¡ã«åããªããšããããšã§ãã å¶éããããããå±æ§ãæ©èœããŸããããªãã·ã§ã³èŠçŽ ã¯1ã€ããååšã§ããŸããã ç§ãã¡ã®å Žåãé åãã³ãã¬ãŒãå±æ§ã®äœ¿çšãçæ³çã§ãïŒ
<dropdown: arrays="option/options"> <!-- --> {{each @options}} <li class="{{this.class}}"> {{this.content}} </li> {{}} <!-- -->
ãããããã³ãã¬ãŒãã宣èšãããšãã«æ°ã¥ããããã«ã 'arrays = "option / options"ãèšå®ãããŠããŸã-以äžã«2ã€ã®ååã瀺ããŸãã
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é¢æ°ã¯ãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããåã«ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ã§åŒã³åºãããŸãã ãã®ç®çã¯ãã³ã³ããŒãã³ãã®å éšã¢ãã«ãåæåããããã©ã«ãå€ãèšå®ããå¿ èŠãªãªã³ã¯ãäœæããããšã§ãïŒåç §ïŒã
// 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(); };
ïŒã€ãã³ããç Žæ£ã
ã³ã³ããŒãã³ããç Žæ£ããããšãã«åŒã³åºãããæçµã¢ã¯ã·ã§ã³ã«å¿ èŠã§ããsetIntervalãªã©ã®ç¡å¹åãã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã®ç¡å¹åãªã©ã
MyComponent.prototype.create = function(){ var intervalId = setIterval myFunc, 1000 this.on('destroy', function(){ clearInterval(intervalId); }); }
ããã§ã³ã³ããŒãã³ããã³ãã©ã§å©çšã§ãããã®ã¯äœã§ããïŒ
ããã«å«ãŸãããã¹ãŠã®ã³ã³ããŒãã³ããã³ãã©ãŒã§ã¯ãã¢ãã«ãã¢ããªãdomïŒinitãé€ãïŒãdomèŠçŽ ãžã®ãã¹ãŠã®ãšã€ãªã¢ã¹ãã³ã³ããŒãã³ãå ã§äœæãããã³ã³ããŒãã³ããparent-componentãžã®parent-referenceãªã©ã䜿çšã§ããŸãã³ã³ããŒãã³ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®ãããã¿ã€ãã
ãã®ã¢ãã«ã¯ãç¹å®ã®ã¹ã³ãŒãã䜿çšããŠããŸãã ã€ãŸããderbyã®ã°ããŒãã«ã¹ã³ãŒãã«ã¢ã¯ã»ã¹ããå¿ èŠãããå Žåãthis.model.rootãŸãã¯this.app.modelã䜿çšããå¿ èŠãããå Žåãthis.modelãä»ããŠã³ã³ããŒãã³ãã¯ã³ã³ããŒãã³ãèªäœã®ã¢ãã«ã®ã¿ãåç §ããŸãã
ã¢ããªã§ãã¹ãŠãæ確ã«ãªããŸãããããã¯ããŒããŒã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããšãã°ã次ã®ããã«ãããããšããããããããŸãã
MyComponent.prototype.back = function(){ this.app.history.back(); }
domãä»ããŠããã³ãã©ãŒãDOMã€ãã³ãã«ã¢ã¿ããã§ããŸãïŒäžåºŠãremoveListeneré¢æ°ã䜿çšå¯èœã«ãªããŸãïŒã次ã«äŸã瀺ããŸãã
// 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
ãã¹ãŠã®domïŒäžåºŠãremoveListenersé¢æ°ã¯ãtypeã[target]ãlistenerã[useCapture]ã®4ã€ã®ãã©ã¡ãŒã¿ãŒãåãããšãã§ããŸãã ã¿ãŒã²ãã-ãã³ãã©ãŒããã³ã°ã¢ããããïŒåé€ãããïŒãšã¬ã¡ã³ã;ã¿ãŒã²ãããæå®ãããŠããªãå Žåãããã¥ã¡ã³ããšåãã§ãã æ®ãã®3ã€ã®ãã©ã¡ãŒã¿ãŒã¯ãéåžžã®addEventListenerïŒtypeãlistener [ãuseCapture]ïŒã®å¯Ÿå¿ãããã©ã¡ãŒã¿ãŒã«äŒŒãŠããŸã
ãã³ãã¬ãŒãå ã®domèŠçŽ ã®ãšã€ãªã¢ã¹ã¯ãasããŒã¯ãŒãã䜿çšããŠèšå®ãããŸãã
<main-menu:> <div as="menu"> <!-- ... --> </div>
MainMenu.prototype.hide = function(){ // $(this.menu).hide(); }
ã³ã³ããŒãã³ããã¢ããªã±ãŒã·ã§ã³ããå¥ã®ã¢ãžã¥ãŒã«ã«åé€ãã
ããã«å ç«ã£ãŠããã³ãã¬ãŒããã¢ããªã±ãŒã·ã§ã³ã®htmlãã¡ã€ã«å ã«æ¢ã«ããã³ã³ããŒãã³ãã®ã¿ãæ€èšããŸããã ã³ã³ããŒãã³ããã¢ããªã±ãŒã·ã§ã³ããå®å šã«åé¢ããå¿ èŠãããå ŽåïŒéåžžã¯å¿ èŠãªå ŽåïŒã次ã®ããã«ããŸãã
ã³ã³ããŒãã³ãçšã«å¥ã®ãã©ã«ããŒãäœæãããjsãhtmlãcssãã¡ã€ã«ããã®äžã«é 眮ãããŸãïŒã¹ã¿ã€ã«ãã¡ã€ã«ã«ã¯å°ããªæ©èœããããŸãïŒãã³ã³ããŒãã³ãã¯ã1ã€ã®ãã©ã¡ãŒã¿ãŒã®ã¿ãæž¡ãããapp.componenté¢æ°ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã«ç»é²ãããŸã-ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã ãã®ãããªãã®ïŒ
app.componentïŒrequireïŒ '../ components / dropdown'ïŒïŒ;
以åãã¢ããªã±ãŒã·ã§ã³ã®htmlãã¡ã€ã«ã«ã³ã³ããŒãã³ããã³ãã¬ãŒããæ¢ã«ååšããŠããå Žåãç»é²ãç°ãªãããšã«æ³šæããŠãã ããã
app.componentïŒ 'dropdown'ãDropdownïŒ;
äŸãèŠãŠã¿ãŸãããïŒ
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;
ãããããããŒããŒã¯ã³ã³ããŒãã³ãã®ååãååŸããŸãïŒãindexïŒãã¯ããã§äœ¿çšãããããããã³ãã¬ãŒãèªäœã«ããããŸããïŒã ã¢ã«ãŽãªãºã ã¯åçŽã§ã-ãã¹ã®æåŸã®ã»ã°ã¡ã³ããååŸãããŸãã _dirnameãã/ home / zag2art / work / project / src / components / tabsãã«çãããªã£ããšããŸããã€ãŸããä»ã®ãã³ãã¬ãŒãã§ã¯ããã®ã³ã³ããŒãã³ãã¯ãtabsããä»ããŠã¢ã¯ã»ã¹ã§ããŸãã
<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'));
www.npmjs.org/package/d-d3-barchartã®ããã«ãã³ã³ããŒãã³ããåå¥ã® npmã¢ãžã¥ãŒã«ãšããŠèšèšãããšéåžžã«äŸ¿å©ã§ãã