RivetsJSドキュメントの翻蚳

動機に぀いお少し


こんにちは、カブロビテス。 少し前に、 RivetsJSラむブラリヌに䌚いたした。 デヌタバむンディング甚のツヌルしか含たれおいたせんが、私は気に入っおいたす。 すぐに蚀いたいのですが、これらの玠晎らしいAngularJSや他のフレヌムワヌクがあるず䞻匵する぀もりはありたせんが、個人的には、Angularのような匷力なツヌルを接続する意味はありたせん。 したがっお、これらの目的のために、RivetsJSを遞択したした。 そしお今、圌の文曞をロシア語に翻蚳するずいうアむデアに觊発されお、私はこの蚘事を曞いおいたす。 動機は単玔です-このラむブラリに぀いお話すのは、たぶん私の意芋だけで、少し「壊れた」英語で曞かれたドキュメントを翻蚳する以䞊のものはありたせんでした。 行きたしょう。

PS私はすぐに謝眪したす、これは私の最初の翻蚳です、たぶん私は超過激な翻蚳者ではないでしょう。 䜕かおかしいず思われる堎合、たたは間違いを芋぀けた堎合は、お知らせください。すぐに修正したす。 事前に感謝したす。

RivetsJSドキュメント



ガむド





参考曞





ガむド


蚭眮

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({ //     prefix: 'rv', //     -. preloadData: true, // Root sightglass interface for keypaths rootInterface: '.', //       templateDelimiters: ['{', '}'], //    on-* binder handler: function(target, event, binding) { this.call(target, event, binding.view.models) } }) 


バむンダヌ

バむンダヌは、芳察されたプロパティが倉曎されたずきに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'] = { //    . template: function() { return JST['todos/todo-item'] }, //          // (  rivets.init      . initialize: function(el, data) { return new ItemController({ item: data.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このドキュメントに関心がある堎合は、「ラむブ」の䟋で補足したす。

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


All Articles