åæ©ã«ã€ããŠå°ã
ããã«ã¡ã¯ãã«ããããã¹ã å°ãåã«ã
RivetsJSã©ã€ãã©ãªãŒã«äŒããŸããã ããŒã¿ãã€ã³ãã£ã³ã°çšã®ããŒã«ããå«ãŸããŠããŸããããç§ã¯æ°ã«å
¥ã£ãŠããŸãã ããã«èšãããã®ã§ããããããã®çŽ æŽãããAngularJSãä»ã®ãã¬ãŒã ã¯ãŒã¯ããããšäž»åŒµããã€ããã¯ãããŸããããå人çã«ã¯ãAngularã®ãããªåŒ·åãªããŒã«ãæ¥ç¶ããæå³ã¯ãããŸããã ãããã£ãŠããããã®ç®çã®ããã«ãRivetsJSãéžæããŸããã ãããŠä»ãåœŒã®ææžããã·ã¢èªã«ç¿»èš³ãããšããã¢ã€ãã¢ã«è§ŠçºãããŠãç§ã¯ãã®èšäºãæžããŠããŸãã åæ©ã¯åçŽã§ã-ãã®ã©ã€ãã©ãªã«ã€ããŠè©±ãã®ã¯ããã¶ãç§ã®æèŠã ãã§ãå°ããå£ãããè±èªã§æžãããããã¥ã¡ã³ãã翻蚳ãã以äžã®ãã®ã¯ãããŸããã§ããã è¡ããŸãããã
PSç§ã¯ãã
ã«è¬çœªããŸããããã¯ç§ã®æåã®ç¿»èš³ã§ãããã¶ãç§ã¯è¶
éæ¿ãªç¿»èš³è
ã§ã¯ãªãã§ãããã äœããããããšæãããå ŽåããŸãã¯ééããèŠã€ããå Žåã¯ããç¥ãããã ãããããã«ä¿®æ£ããŸãã äºåã«æè¬ããŸãã
RivetsJSããã¥ã¡ã³ã
ã¬ã€ã
- èšçœ®
- 䜿çšãã
- ãã€ã³ãã£ã³ã°
- ãã©ãŒããã¿ãŒ
- ã³ã³ããŒãã³ã
- ã¢ããã¿ãŒ
- ããããã£
- ãã€ã³ãã£ã³ã°å埩
åèæž
- ããã¹ã
- html
- èŠãã
- é ã
- æå¹
- é害è
- ãã
- ã§ãªãéã
- 䟡å€
- ãã§ãã¯æžã¿
- æªãã§ãã¯
- on- [ã€ãã³ã]
- å-[ã¢ã€ãã ]
ã¬ã€ã
èšçœ®
GitHubããææ°ã®å®å®ããŒãžã§ã³ãããŠã³ããŒãããããéžæããããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠã€ã³ã¹ããŒã«ã§ããŸãã çŸåšãnpmãcomponentãjamãbowerã§ã®ãªãªãŒã¹ããµããŒãããŠããŸãïŒæšå¥šïŒã
bower install rivets
ãªãããã¯
ãµã€ãã°ã©ã¹ãšå¯æ¥ãªé¢ä¿ã
ãããŸãã Sightglassãåå¥ã«æ¥ç¶ããå Žåã¯ãå¿
ãæåã«æ¥ç¶ããŠãã ããã
<script src="bower_components/sightglass/index.js"></script> <script src="bower_components/rivets/dist/rivets.min.js"></script>
ãŸãã¯ãäž¡æ¹ã®ã©ã€ãã©ãªãå«ãRivetsããã±ãŒãžããã©ã°ã€ã³ã§ããŸãã
<script src="bower_components/rivets/dist/rivets.bundled.min.js"></script>
泚ïŒCommonJSã¢ãžã¥ãŒã«ãšã RequireJSãalmondãªã©ã®AMDã¹ã¯ãªããããŒããŒã¯ãå¿
èŠã«å¿ããŠå®å
šã«ãµããŒããããŠããŸãã䜿çšãã
ãã¿ãŒã³
ãã³ãã¬ãŒãã¯ããã¬ãŒã³HTMLã§UIã«ãã£ãŠåœ¢æãããŸãã ãã³ãã¬ãŒãèŠçŽ ã䜿çšããŠããã¥ã¡ã³ãå
ã§çŽæ¥å®çŸ©ãããã奜ããªæ¹æ³ã§ä¿åããã³ããŒãã§ããŸãã 䟿å©ãªæ¹æ³ã䜿çšããŠãããŒã¿ããã³ãã¬ãŒãã«åºåããã ãã§ãã
<section id="auction"> <h3>{ auction.product.name }</h3> <p> : { auction.currentBid | money }</p> <aside rv-if="auction.timeLeft | lt 120"> ! { auction.timeLeft | time }. </aside> </section>
ãã®äŸã®éèŠãªèŠçŽ ã¯ãæ¥é èŸ
ãrv-ããæã€å±æ§ã远å ããããšãšã
ã{...}ãã®ã»ã¯ã·ã§ã³ã匷調衚瀺ããã³ã©ããããããšã§ãã ãããã®èŠçŽ ã¯ãã€ã³ãã£ã³ã°ã¹ããŒãã¡ã³ãã§ãããããã¯ããŒã¿ããã³ãã¬ãŒãã«æž¡ãæ¹æ³ã§ãã ãã¹ãŠã®å®£èšã¯ãçã衚çŸåè±ããªæ§æã䜿çšããŸãã
(keypath | ) [...]
ããŒãã¹ã¯ã芳枬ããŒã¿ãåãåãã倿Žãçºçãããšãã«ãã€ã³ãã£ã³ã°ãä¿®æ£ããŸãã ããªããã£ãã¯ãæååãæ°å€ãããŒã«å€ãnullããŸãã¯æªå®çŸ©ã§ãã
ãã©ãŒããã¿ããããã®ããããã£ãšæ©èœã®è©³çްã«ã€ããŠã¯ã察å¿ããç« ã§èª¬æããŸãã
ãã€ã³ãã£ã³ã°
ãã³ãã¬ãŒãã®èŠçŽ ã§
rivets.bindãåŒã³åºããŠãåºåãããããŒã¿ãæž¡ããŸãã
rivets.bind($('#auction'), {auction: auction})
rivets.bindãåŒã³åºã
ãã³ã«ãããŒã¿è¡šçŸã®å®å
šãªã»ãããè¿ãããŸãã
view.unbindïŒïŒã䜿çšããŠããã€ã³ãã£ã³ã°ã€ãã³ãã忢ããŸãã
æ§æ
rivets.configureã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãæ§æããŸãã å¿
èŠã«å¿ããŠãç¹å®ã®ãã¥ãŒã§ãã¹ãŠã®èšå®ãããŒã«ã«ã§çœ®æã§ããããšã«æ³šæããŠãã ããã
rivets.configure({
ãã€ã³ããŒ
ãã€ã³ããŒã¯ã芳å¯ãããããããã£ã倿Žããããšãã«DOMãæŽæ°ããæ¹æ³ãRivets.jsã«æç€ºããåœä»€ã®ã»ããã§ãã Rivets.jsã«ã¯ãå©äŸ¿æ§ã®ããã«é »ç¹ã«äœ¿çšããããã€ã³ããŒãä»å±ããŠããŸãã Rivets.jsã«ä»å±ããŠããçµã¿èŸŒã¿ã®ãã€ã³ããŒã®äœ¿ç𿹿³ã«ã€ããŠã¯ããªãã¡ã¬ã³ã¹ãåç
§ããŠãã ããã
æåã¯ãçµã¿èŸŒã¿ã®ãã€ã³ããŒã䜿çšããŠåºæ¬çãªUIã¿ã¹ã¯ãå®è¡ã§ããŸãããã¢ããªã±ãŒã·ã§ã³ã®ã¿ã¹ã¯ã®å®è¡ã«åºæã®ç¬èªã®ãã€ã³ããŒã§Rivets.jsãæ¡åŒµããããšã匷ããå§ãããŸãã
çé¢ãã€ã³ããŒ
äžæ¹åãã€ã³ããŒã¯ãã¢ãã«ããããã£ã倿ŽããããšDOMãæŽæ°ããŸãïŒã¢ãã«ãã¥ãŒã®ã¿ïŒã ã¢ãã«ã®ããããã£ã倿Žããããšãã«èŠçŽ ã®è²ãæŽæ°ãããã€ã³ããŒãå¿
èŠã ãšããŸãããã ããã§ã¯ãåçŽãªã¯ããŒãžã£ãŒã«ãã£ãŠäžæ¹åãã€ã³ããŒãå®çŸ©ã§ããŸãã ãã®é¢æ°ã¯ãèŠçŽ ãšã¢ãã«ããããã£ã®çŸåšã®å€ãåãå
¥ããŸããããã䜿çšããŠãèŠçŽ ããããã£ãæŽæ°ããŸãã
rivets.binders.src = function(el, value) { var href = "/my/path/to/image/" + value el.setAttribute("src ", src); } rivets.binders.alt = function(el, value) { var alt = value el.setAttribute("alt", alt); }
äžèšã®ç¹å®ã®ãã€ã³ããŒã䜿çšãããšããã³ãã¬ãŒãã§ã
rv-src ããšã
rv-alt ãã䜿çšã§ããŸãã
<img rv-src="data.image" rv-alt=âdata.titleâ />
äž¡é¢ãã€ã³ããŒ
çé¢ãã€ã³ããŒã®ãããªäž¡é¢ãã€ã³ããŒã¯ãã¢ãã«ã®ããããã£ã倿ŽããããšïŒã¢ãã«ãã¥ãŒïŒDOMãæŽæ°ã§ããŸããããŠãŒã¶ãŒãèªèšŒããŒã¿ãå
¥åããŠã¯ãªãã¯ããããšã§å人ã¢ã«ãŠã³ããæŽæ°ãããªã©ãDOMãšå¯Ÿè©±ãããšãã«ã¢ãã«ãæŽæ°ããããšãã§ããŸãïŒãã¥ãŒã¢ãã«ïŒéä¿¡ããŸãã¯ãµãŒãããŒãã£ã®ãŠã£ãžã§ãããšã®çžäºäœçšã
ãŠãŒã¶ãŒãDOMãšå¯Ÿè©±ãããšãã«ã¢ãã«ãæŽæ°ããã«ã¯ããã®DOMèŠçŽ ããã€ã³ãããã³ãã€ã³ãè§£é€ããŠãã®ã¢ãã«ã«å€ãèšå®ããæ¹æ³ãRivets.jsã«æç€ºããå¿
èŠããããŸãã ãã€ã³ããŒãåçŽãªã¯ããŒãžã£ãŒé¢æ°ãšããŠå®£èšãã代ããã«ãäž¡é¢ãã€ã³ããŒã¯ããã€ãã®è¿œå 颿°ãå«ããªããžã§ã¯ããšããŠå®£èšãããŸãã
rivets.binders.toggle = { bind: function(el) { adapter = this.config.adapters[this.key.interface] model = this.model keypath = this.keypath this.callback = function() { value = adapter.read(model, keypath) adapter.publish(model, keypath, !value) } $(el).on('click', this.callback) }, unbind: function(el) { $(el).off('click', this.callback) }, routine: function(el, value) { $(el)[value ? 'addClass' : 'removeClass']('enabled') } }
API
ãã€ã³ãããã€ã³ããã®é¢æ°ã¯ãview.bindïŒïŒãåæåããããã«åŒã³åºããããã€ã³ãã£ã³ã°ã®åæç¶æ
ãä¿åããããã€ãã³ããªã¹ããŒãèŠçŽ ã«å²ãåœãŠããããããã«äœ¿çšããŸãã
ãã€ã³ã.unbindãã®é¢æ°ã¯ãview.unbindïŒïŒãåæåããããã«åŒã³åºãããŸãã ããã䜿çšããŠãbinder.routineã«ãã£ãŠå€æŽãããèŠçŽ ã®ç¶æ
ããªã»ããããããbinder.bind颿°ã§èšå®ããèŠçŽ ã®ã€ãã³ããªã¹ããŒãè§£æŸãããããŸãã
ãã€ã³ããã«ãŒãã³ãã³ãã¬ãŒã颿°ã¯ãã¢ãã«ã®èŠ³æž¬ããã屿§ã倿Žããããšãã«åŒã³åºãããDOMã®æŽæ°ã«äœ¿çšãããŸãã äžæ¹åãã€ã³ãã£ã³ã°ãåçŽãªã¯ããŒãžã£ãŒé¢æ°ãšããŠå®£èšãããŠããå Žåãå®éã«å®çŸ©ããã®ã¯ã«ãŒãã³é¢æ°ã§ãã
ãã€ã³ãããããªãã·ã¥view.publishïŒïŒãåŒã³åºããŠãããã®ãã€ã³ããŒãå
¬éããå Žåã¯ãtrueã«èšå®ããŸãã
ãã©ãŒããã¿ãŒ
ãã©ãŒããã¿ãŒã¯ãçä¿¡ããã³/ãŸãã¯çºä¿¡ãã€ã³ãã£ã³ã°å€ã倿Žãã颿°ã§ãã ãããã䜿çšããŠãæ¥ä»ãæ°å€ãé貚ãªã©ããã©ãŒãããã§ããŸãã ãã©ãŒããã¿ã¯ãåºåããŒã¿ãåŠçããå¿
èŠãããå Žåã«éåžžã«åœ¹ç«ã¡ããµãŒããŒãããŒãããªãããã«ãã¯ã©ã€ã¢ã³ããããŒãã§ããŸãã ããšãã°ããµãŒããŒããã¿ã€ã ã¹ã¿ã³ã圢åŒã®æ¥ä»ãååŸããŸãã ã¯ã©ã€ã¢ã³ãäžã§ãã©ãŒããã¿ã䜿çšãããšã1ã€ã®é¢æ°ãèšè¿°ããããããã¹ãŠã®ãã€ã³ããŒã§äœ¿çšããããšã§ãã¿ã€ã ã¹ã¿ã³ããç®çã®æ¥ä»åœ¢åŒã«å€æã§ããŸãã
äžæ¹åãã©ãŒããã¿ãŒ
ãããã¯ãæžåŒèšå®ã䜿çšããæãäžè¬çã§å®çšçãªæ¹æ³ã§ãããå€ã«å¯ŸããåçŽãªèªã¿åãå°çšã®å€æŽã§ãã 以äžã®äŸã§ã¯ãã€ãã³ãã®çµäºãŸã§ã®æ®ãæ¥æ°ã®ãã©ãŒããã¿ãŒã決å®ã§ããŸãã ã€ãã³ãã®çµããã3æ¥ç®ã«ãªããšä»®å®ããŸãã
rivets.formatters.remain = function(value){ value = parseInt(value / 86400); return value; }
ãã©ãŒããã¿ã¯ããã€ã³ããŒã宣èšãããšãã«äœ¿çšãããŸããèšå·ã|ã åºåãæåãšããŠäœ¿çšãããŸãã
<span rv-text="event.endDate | remain"></span>
äž¡é¢ãã©ãŒããã¿
åæ¹åãã©ãŒããã¿ã¯ãã³ã¹ãããã«ãªã©ã®ç¹å®ã®åœ¢åŒã§ä¿åãããšåæã«ãã«ãŒãã«ãªã©ã®ç°ãªã圢åŒã§ããŒã¿ãå
¥åã§ããããã«ããå Žåã«äŸ¿å©ã§ãã
ãã©ãŒããã¿ãŒãåçŽãªã¯ããŒãžã£ãŒé¢æ°ãšããŠå®£èšãã代ããã«ãèªã¿åãããã³çºè¡é¢æ°ãå«ããªããžã§ã¯ããšããŠå®£èšã§ããŸãã ãã©ãŒããã¿ãŒãåçŽãªã¯ããŒãžã£ãŒãšããŠå®£èšãããŠããå ŽåãRivetsã¯èªã¿åãå°çšã§ãããšæ³å®ããŸããããã©ãŒããã¿ãŒããªããžã§ã¯ããšããŠå®£èšãããŠããå ŽåãRivetsã¯èªã¿åãããã³å
¬é颿°ã䜿çšããŠå€ãå¹ççã«ã·ãªã¢ã«åããã³é倿ããŸãã
ééçãªäŸ¡å€ããã«ã§ä¿åããããããŠãŒã¶ãŒããã®å€ãã«ãŒãã«ã§å
¥åã§ããããã«ãããšããã©ãŒããã¿ãŒã¯ãã®å€ãã¢ãã«ã«å
¥åãããšãã«å€åœçºæ¿åžå Žã®å€ã§ãããã®å€ãèªåçã«å€æããŸãïŒãã®å€ãããŒããããç¬éã«ããããããŸãïŒã ãã®ç®çã®ããã«ãåæ¹åã®é貚ãã©ãŒããã¿ãŒã䜿çšããŸãã
rivets.formatters.currency = { read: function(value) { return (value / 50) }, publish: function(value) { return Math.round(parseInt(value) * 50) } }
ããã§ãçé¢ãŸãã¯äž¡é¢ã®ä»»æã®ã¿ã€ãã®ãã€ã³ãã£ã³ã°ã§ãã©ãŒããã¿ãŒã䜿çšããŠãã€ã³ãã£ã³ã°ãäœæã§ããŸãã
<input rv-value="item.price | currency">
åæ¹åãã©ãŒããã¿ãä»ã®ä»»æã®é åºã§ä»»æã®é åºã§é¢é£ä»ããããšãã§ããŸãã ãããã¯å·Šããå³ã«èªã¿åãããå³ããå·Šã«çºè¡ãããããŒã¿ãã¢ãã«ã«çºè¡ïŒæ¿å
¥ïŒãããšãã«èªã¿åãå°çšãã©ãŒããã¿ãŒãã¹ãããããŸãã
ãã©ãŒããã¿åŒæ°
ãã©ãŒããã¿ã¯ã
ããŒãã¹ãšããªããã£ãã®åœ¢åŒã§ä»»æã®æ°ã®åŒæ°ãåãå
¥ããããšãã§ããŸãã
ãã©ãŒããã¿ã¯ãã|ãæåã䜿çšããŠå€ãåºåãããšãã§ããŸãã
ãã©ãŒããã¿ã®åŒæ°ã¯ã
ããŒãã¹ãšããªããã£ãã§ãã
ããŒãã¹ã¯ããã©ãŒããã¿ãžã®åŒæ°ãšããŠãéåžžã®
ããŒãã¹ã®ãã¹ãŠã®ããããã£ãšæ©èœãç¶æ¿ããŸãã
ïŒãã©ãŒããã¿ãŒïŒ[ããŒãã¹| ããªããã£ã...]
<span>{ alarm.time | time user.timezone 'hh:mm' }</span>
ãã€ã³ãã£ã³ã°å®£èšã®ååŒæ°ã®å€ãè©äŸ¡ããã远å ã®åŒæ°ãšããŠãã©ãŒããã¿é¢æ°ã«æž¡ãããŸãã
rivets.formatters.time = function(value, timezone, format) { return moment(value).tz(timezone).format(format) }
ã³ã³ããŒãã³ã
ã³ã³ããŒãã³ãã䜿çšãããšãä»»æã®ãã³ãã¬ãŒãã§äœ¿çšã§ããåå©çšå¯èœãªãã¥ãŒãå®çŸ©ã§ããŸãã ããã¯ããã€ã³ããŒã«é¢é£ããŠãã³ãã¬ãŒãã«ã³ã³ããŒãã³ããåã蟌ãå¿
èŠãããå Žåã«åœ¹ç«ã¡ãŸãã ãã€ã³ããŒã¯ç¬èªã®å±æ§ãå®çŸ©ããã³ã³ããŒãã³ãã¯ãã€ãã£ãèŠçŽ ãšããŠå®çŸ©ãããŸãã
ã³ã³ããŒãã³ããªããžã§ã¯ãã¯ãã³ã³ããŒãã³ãã®ãã³ãã¬ãŒããè¿ããã³ãã¬ãŒã颿°ãšããŠå®çŸ©ããå¿
èŠããããŸãïŒHTMLæååããŸãã¯å¥ã®å¿
èŠãªèŠçŽ ã䜿çšã§ããŸãïŒã ãŸãããã³ãã¬ãŒãã«ãã€ã³ãããããã®ç¹å¥ãªã¹ã³ãŒããªããžã§ã¯ããè¿ãåæå颿°ãå®çŸ©ããå¿
èŠããããŸãïŒãã®é¢æ°ã¯MVCãšããã€ãã®é¡äŒŒç¹ããããŸãïŒã
rivets.components['todo-item'] = {
ãã³ãã¬ãŒãå
ã§ã³ã³ããŒãã³ãã䜿çšããã«ã¯ãã³ã³ããŒãã³ãããŒãšåãã¿ã°åãæã€èŠçŽ ã䜿çšããã ãã§ãã ãã¹ãŠã®èŠçŽ å±æ§ã¯ãåæåã³ã³ããŒãã³ãã®é¢æ°ã«æ¿å
¥ãããåã«ããŒãã¹ãšèŠãªãããŸãã
<todo-item item="myItem"></todo-item>
ãŸããç¹å®ã®å±æ§ãããŒãã¹ã§ã¯ãªãéçã«ãããå Žåã¯ãéçã«èšå®ã§ããŸãã
rivets.components['todo-item'] = { static: ['list-style'], ⊠}
<todo-item item="myItem" list-style="condensed"></todo-item>
ã³ã³ããŒãã³ãã¯ããã³ãã¬ãŒãã®å€éšã§ç¬èªã«åæåããããšãã§ããŸãã ããã¯ãããšãã°ã¢ããªã±ãŒã·ã§ã³ãæåã«éãããšãã«è¡šç€ºãããã¢ãŒãã«ãŠã£ã³ããŠãšããŠãæ°ãããã¥ãŒãèªåã§DOMã«æ¿å
¥ããå Žåã«äŸ¿å©ã§ãã ãã®APIã¯rivets.bindãšäŒŒãŠããŸãããçŸåšã®ãã³ãã¬ãŒã\èŠçŽ ãæž¡ã代ããã«ããã®ã³ã³ããŒãã³ããã³ãã¬ãŒããã¬ã³ããªã³ã°ãã芪èŠçŽ ã®ã³ã³ããŒãã³ãåãšãã®ã¯ã©ã¹\èå¥å\ã¿ã°ã®ã¿ãæž¡ãç¹ãç°ãªããŸãã
rivets.init('my-app', $('body'), {user: user}) rivets.init('todo-item', $('#modal-content'), {item: myItem})
ã¢ããã¿ãŒ
Rivets.jsã¯ããªããžã§ã¯ããšãã®èª¬æã«ãšããããŸããã ããã«ãããéåžžã«æè»ã«ãªããä»ã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãšãšãã«éçºã«é©å¿ããã³é©å¿ã§ããŸããããããã®ãªããžã§ã¯ããŸãã¯ãããã®ãªããžã§ã¯ããã©ã®ããã«èšè¿°ããããRivet.jsã«äŒããå¿
èŠããããŸãã ãã®æ©èœã¯ãSightglassã©ã€ãã©ãªãŒã«ãã£ãŠç®¡çãããŸãã
åã¢ããã¿ãŒã¯ãããŒãšããŒãã¹ãåé¢ããããã«äœ¿çšãããäžæã®ã€ã³ã¿ãŒãã§ã€ã¹ïŒåäžæåïŒãšããŠå®çŸ©ãããŸãã ããŒãã¹ã§äœ¿çšãããã€ã³ã¿ãŒãã§ãŒã¹ã¯ãåäžéããŒã«äœ¿çšããã¢ããã¿ãŒã決å®ããŸãã
user.address:city
äžèšã®äŸã§ã¯ãããŒãã¹ã¯ã¢ããã¿ãŒãããã䜿çšããŠããŸãã ãŠãŒã¶ãŒãªããžã§ã¯ãã®ã¢ãã¬ã¹ããŒã«ã¢ã¯ã»ã¹ããã«ã¯ãã¢ããã¿ãŒ::ã¢ãã¬ã¹ãªããžã§ã¯ãã®éœåžããŒã«ã¢ã¯ã»ã¹ããŸãã ã¢ãã¬ã¹ãéåžžãããã¯ããŒã³ã¢ãã«ãæããŠãŒã¶ãŒãªããžã§ã¯ãã®ããããã£ã§ããããå®éã«ã¯éœåžã¯ããã¯ããŒã³ã¢ãã«ã®å±æ§ã§ãããšæ³åããŠãã ããããã®çš®ã®æå®ãå®éã«ç°¡æœã§è¡šçŸåè±ãã§ããããšãããããŸãã
çµ±åã¢ããã¿ãŒ
Rivets.jsã«ã¯ã¢ããã¿ãŒãä»å±ããŠããŸãã åçŽãªJavasciptãªããžã§ã¯ãã®ããããã£ã説æããŸãã ãã®ã¢ããã¿ãŒã¯ããµã³ãã«ã®Object.definePropertyã䜿çšããŠãES5ïŒECMAScript 5ïŒã«æ¢ã«å®è£
ãããŠããŸãã å°æ¥ããã®ã¢ããã¿ã¯ããã©ãŠã¶ããµããŒããéå§ãããšããã«ãObject.observeã®ã¿ã䜿çšããŠå®è£
ãããŸãã
ES5ããµããŒãããªããã©ãŠã¶ãŒïŒ<IE 9ïŒã䜿çšããå¿
èŠãããå Žåããã®ã¢ããã¿ãŒããå¿
èŠãªãã©ãŠã¶ãŒããµããŒãããããªãã¡ã€ã«ãŸãã¯ãµãŒãããŒãã£ã©ã€ãã©ãªã«çœ®ãæããããšãã§ããŸãã ããšãã°Chromeã®ã¿ã䜿çšããå Žåã¯ãObject.observeã䜿çšããŠçµæã確èªããŠãã ããã
ã¢ããã¿ãŒãäœæããŸãã
ã¢ããã¿ãŒã¯ãããããã£åãšããŠã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããå€ãšããŠã¢ããã¿ãŒãªããžã§ã¯ãã䜿çšããŠãrivets.adaptersã䜿çšããŠå®çŸ©ãããŸãã
次ã®ã¢ããã¿ãŒ:: Backbone.jsããã³Stapes.jsã¢ãžã¥ãŒã«ã®äž¡æ¹ã§æ©èœããŸãã
rivets.adapters[':'] = { observe: function(obj, keypath, callback) { obj.on('change:' + keypath, callback) }, unobserve: function(obj, keypath, callback) { obj.off('change:' + keypath, callback) }, get: function(obj, keypath) { return obj.get(keypath) }, set: function(obj, keypath, value) { obj.set(keypath, value) } }
èšèšããããã£
èšèšããããã£ã¯ã1ã€ä»¥äžã®äŸåããããã£ã倿Žããããšãã«åè©äŸ¡ããŒã¿ãåãåã颿°ã§ãã èšç®ãããããããã£ã¯ãRivets.jsã§éåžžã«åçŽã«å®£èšãããã<ãèšå·ã䜿çšããŠé¢æ°ãäŸåé¢ä¿ããåé¢ããã ãã§ãã æ¬¡ã®ãã€ã³ãã£ã³ã°ã®äŸã¯ãéå§å±æ§ãŸãã¯çµäºå±æ§ã倿Žããããšãã«event.durationïŒïŒã§åè©äŸ¡ãããŸãã
<span rv-text="event.duration < start end"></span>
äŸåããŒãã¹ã¯ãã¢ãã«ã³ã³ããã¹ãããã§ã¯ãªããã¿ãŒã²ããããååŸãããããšã«æ³šæããŠãã ããã ãããã£ãŠãäžèšã®äŸã§ã¯ãã¿ãŒã²ããã¯
ã€ãã³ããªããžã§ã¯ãã§ãããäŸåé¢ä¿ã¯
event.startãš
event.endã§ãããã€ã³ãã£ã³ã°ã®å埩ã
Rivets.jsã§æäŸããã
rv-each- [item]ãã€ã³ããŒã䜿çšããŠãé
åã®ãã¹ãŠã®èŠçŽ ãã«ãŒãã¢ãŠããããã®èŠçŽ ã®é¢é£ã€ã³ã¹ã¿ã³ã¹ã远å ããŸãã
<ul> <li rv-each-todo="list.todos"> <input type="checkbox" rv-checked="todo.done"> <span>{ todo.summary }</span> </li> <ul>
åèæž
ããã¹ã
èŠçŽ ã«ããã¹ããåºåãã
<h1 rv-text="user.name"></h1>
è£éã䜿çšããŠããã¹ããåºåããããšãã§ããŸãã
<p>{ user.name } is { user.age } years old.</p>
html
HTMLã³ã³ãã³ããèŠçŽ ã«åºåããŸãã
<section rv-html="item.summary"></section>
èŠãã
å€ã«å¿ããèŠçŽ ã®åºå-trueã®å Žåãåºåãfalseã®å Žåãé衚瀺ã
<button rv-show="user.admin">Remove</button>
é ã
érv-show屿§ïŒtrueã«èšå®ãããŠããå Žåã¯é衚瀺ãfalseã®å Žåã¯å°å·ïŒã
<section rv-hide="feature.disabled"></section>
æå¹
èŠçŽ ã®ã¢ã¯ãã£ããã£ãæå®ãã屿§ã True-èŠçŽ ã¯æå¹ã«ãªããFalse-ç¡å¹ã«ãªããŸãã
<button rv-enabled="user.canVote">Upvote</button>
é害è
é屿§ã¯rv察å¿ã§ãã True-ç¡å¹ãFalse-æå¹ã
<button rv-disabled="user.suspended">Upvote</button>
ãã
å€ãtrueã®å ŽåãDOMã«ããŒããšåæ§ã«ãã³ãã£ããèŠçŽ ãæ¿å
¥ããå€ãfalseãšèŠãªãããå Žåã¯èŠçŽ ã衚瀺ããŸããã
<section rv-if="item.editable"></section>
ã§ãªãéã
é屿§ã¯rv-ifã§ãã
<section rv-unless="item.locked"></section>
䟡å€
屿§ã倿Žããããšãã«èŠçŽ ã®å€ãèšå®ããå
¥åèŠçŽ ããŠãŒã¶ãŒå
¥åãã倿Žããããšãã«é¢é£ãªããžã§ã¯ãã®å€ãèšå®ããŸãïŒäž¡æ¹åã§æ©èœããŸãïŒã
<input rv-value="item.name">
ãã§ãã¯æžã¿
æšæž¬ãããããèšèšãããŠããŸãã å€ãtrueã®å Žåãchecked屿§ãèšå®ããå€ãfalseã®å Žåãchecked屿§ãåé€ããŸãã ãŸãããã§ãã¯ããã¯ã¹èŠçŽ ããŠãŒã¶ãŒå
¥åãã倿Žããããšãã«ãé¢é£ä»ãããããªããžã§ã¯ãã®å€ãèšå®ããŸãïŒäž¡æ¹åã§æ©èœããŸãïŒã
<input type="checkbox" rv-checked="item.enabled">
æªãã§ãã¯
屿§ã¯rv-checkedã®å察ã§ãã
<input type="checkbox" rv-unchecked="item.disabled">
on- [ã€ãã³ã]
ã€ãã³ããªã¹ããŒã¯ã[event]ã§æå®ãããã€ãã³ããšé¢é£ãªããžã§ã¯ãïŒé¢æ°ãè¿ãå¿
èŠããããŸãïŒãã³ãŒã«ããã¯ãšããŠäœ¿çšããŠãèŠçŽ ã«ãã€ã³ãããŸã
泚ïŒãã€ã³ãã£ã³ã°ã®æçµå€ãå¥ã®é¢æ°ã«å€æŽããããšããã®ãã€ã³ããŒã¯èªåçã«å€ãã³ãŒã«ããã¯ãã¢ã³ãã€ã³ãããæ°ããã€ãã³ããªã¹ããŒãæ°ãã颿°ã«ãã€ã³ãããŸãã
<button rv-on-click="item.destroy">Remove</button>
å-[ã¢ã€ãã ]
é
åã®åèŠçŽ ã«èŠçŽ ã®æ°ããã€ã³ã¹ã¿ã³ã¹ã远å ããŸãã åèŠçŽ ã¯ãé
åã®çŸåšã®å埩å¯èœãªèŠçŽ ãæã远å ã®ããããã£ãå«ãå®å
šã«æ°ãããã¹ãããããã¥ãŒã«é¢é£ä»ããããŸãã
<ul> <li rv-each-todo="todos"> <input type="checkbox" rv-checked="todo.done"> { todo.name } </li> <ul>
PSãã®ããã¥ã¡ã³ãã«é¢å¿ãããå Žåã¯ããã©ã€ããã®äŸã§è£è¶³ããŸãã