このコンテンツは基本的にオリジナル資料の翻訳です。目的は、Magento 2 の KnockoutJs について学び、KnockoutJs に関するポルトガル語のコンテンツを作成することです。
KnockoutJs では、バインディング は、ViewModel のロジック (データおよびビジネス ロジック) を View (HTML) に接続する方法です。つまり、バインディングを通じて、DOM を直接操作することなく、ユーザー インターフェイスがデータの変更を自動的に反映します。
KnockoutJ のバインディングは、HTML 要素の data-bind 属性を通じて機能します。この属性では、使用するバインディングと関連する値を指定します。
バインディング クリックにより、関連する DOM 要素がクリックされたときに選択された JavaScript 関数が呼び出されるように、イベント ハンドラーが追加されます。これは、
要素がクリックされるたびに、ViewModel に渡されたメソッドが呼び出され、ViewModel の状態が変更され、UI が次のように変更されます。更新されました。
<div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="click: incrementClickCounter">Click me</button> </div> <script type="text/javascript"> ko.applyBindings({ numberOfClicks : ko.observable(0), incrementClickCounter : function() { var previousCount = this.numberOfClicks(); this.numberOfClicks(previousCount + 1); } }); </script>
デフォルトでは、KnockoutJs は、click イベントによる標準アクションの実行を防ぎます。これは、 タグで binding click を使用すると、ブラウザは関数を呼び出すだけで、リンクの href には移動しないことを意味します。クリックツークリック バインディングは通常、別の Web ページへの通常のハイパーリンクとしてではなく、ViewModel を操作する UI の一部としてリンクを使用する場合に使用されます。標準のクリック アクションを続行する必要がある場合は、関数内で true を返すだけです。
binding イベントを使用すると、指定したイベントのイベント ハンドラーを追加して、関連する DOM 要素に対してそのイベントが発生したときに、選択した JavaScript 関数が呼び出されるようにすることができます。これを使用して、キーの押下、マウスホバー、マウスの終了などのイベントにバインドできます。
<div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="click: incrementClickCounter">Click me</button> </div> <script type="text/javascript"> ko.applyBindings({ numberOfClicks : ko.observable(0), incrementClickCounter : function() { var previousCount = this.numberOfClicks(); this.numberOfClicks(previousCount + 1); } }); </script>
binding submit * は、フォーム上の送信バインディング ディレクティブであり、そのフォームに対するブラウザのデフォルトの送信アクションを防ぎます。つまり、ブラウザはハンドラー関数を呼び出しますが、そうではありません。フォームをサーバーに送信します。 *submit バインディングは通常、フォームが通常の HTML フォームとしてではなく、ViewModel へのインターフェイスとして使用される場合に使用されます。フォームを通常の HTML フォームとして送信する必要がある場合は、送信ハンドラーから true を返すだけです。
<div> <div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }"> Mouse over me </div> <div data-bind="visible: detailsEnabled"> Details </div> </div> <script type="text/javascript"> ko.applyBindings({ detailsEnabled: ko.observable(false), enableDetails: function() { this.detailsEnabled(true); }, disableDetails: function() { this.detailsEnabled(false); } }); </script>
binding Enable は、パラメーター値が true の場合に、関連付けられた DOM 要素を有効にします。 binding disable は逆に機能し、値が true の場合、関連付けられた DOM 要素が無効になります。
<form data-bind="submit: doSomething"> <button type="submit">Submit</button> </form> <script type="text/javascript"> ko.applyBindings({ this.doSomething = function(formElement) { // ... now do something } }); </script>
binding 値 *は、*ViewModel のプロパティに関連付けられた DOM 要素の値をバインドします。これは通常、、
ユーザーが関連付けられたフォーム コントロールの値を編集すると、その値は ViewModel で更新されます。同様に、ViewModel が値を更新すると、画面上のフォーム コントロールの値も更新されます。
<p> <input type='checkbox' data-bind="checked: hasCellphone" /> I have a cellphone </p> <p> Your cellphone number: <input type='text' data-bind="value: cellphoneNumber, enable: hasCellphone" /> </p> <script type="text/javascript"> ko.applyBindings({ hasCellphone : ko.observable(false), cellphoneNumber: "" }); </script>
binding 値は
binding textInput は、フィールド ( または
<p>Login name: <input data-bind="value: userName" /></p> <p>Password: <input type="password" data-bind="value: userPassword" /></p> <script type="text/javascript"> ko.applyBindings({ userName: ko.observable(""), // Initially blank userPassword: ko.observable("abc"), // Prepopulate }); </script>
binding textInput は、デフォルトでは、ユーザーがテキスト ボックスからフォーカスを移動したときにのみモデルを更新します。 binding textInput は、キーストロークまたはその他のテキスト入力メカニズムごとにモデルを即座に更新します。
binding hasFocus は、DOM 要素のフォーカス状態を ViewModel プロパティにバインドします。これは双方向接続であり、ViewModel プロパティが true または false に設定されている場合、関連付けられた要素がフォーカスされるかフォーカスされません。
<div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="click: incrementClickCounter">Click me</button> </div> <script type="text/javascript"> ko.applyBindings({ numberOfClicks : ko.observable(0), incrementClickCounter : function() { var previousCount = this.numberOfClicks(); this.numberOfClicks(previousCount + 1); } }); </script>
チェックされた バインディング は、チェック可能なフォーム コントロール、つまりチェックボックス () またはラジオ ボタン () をバインドします。 ViewModel.
のプロパティ
<div> <div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }"> Mouse over me </div> <div data-bind="visible: detailsEnabled"> Details </div> </div> <script type="text/javascript"> ko.applyBindings({ detailsEnabled: ko.observable(false), enableDetails: function() { this.detailsEnabled(true); }, disableDetails: function() { this.detailsEnabled(false); } }); </script>
バインディング オプションは、ドロップダウン リスト (
割り当てられる値は 配列 (または Observable Array) である必要があります。 配列内の各項目の項目が表示されます。
<form data-bind="submit: doSomething"> <button type="submit">Submit</button> </form> <script type="text/javascript"> ko.applyBindings({ this.doSomething = function(formElement) { // ... now do something } }); </script>
binding selectedOptions は、複数選択リスト内のどの要素が現在選択されているかを制御します。これは、
ユーザーが複数選択リスト内の項目を選択または選択解除すると、対応する値が ViewModel 内の配列に追加または削除されます。同様に、ViewModel の Observable Array であると仮定すると、その 配列 に項目を追加または削除するたびに、UI 内の対応する項目が選択または選択解除されます。 。双方向接続です。
<p> <input type='checkbox' data-bind="checked: hasCellphone" /> I have a cellphone </p> <p> Your cellphone number: <input type='text' data-bind="value: cellphoneNumber, enable: hasCellphone" /> </p> <script type="text/javascript"> ko.applyBindings({ hasCellphone : ko.observable(false), cellphoneNumber: "" }); </script>
binding uniqueName は、バインドされた DOM 要素が空ではない name 属性を持つことを保証します。 DOM 要素に name 属性がない場合、この接続は属性を提供し、それを一意の文字列値に設定します。
<p>Login name: <input data-bind="value: userName" /></p> <p>Password: <input type="password" data-bind="value: userPassword" /></p> <script type="text/javascript"> ko.applyBindings({ userName: ko.observable(""), // Initially blank userPassword: ko.observable("abc"), // Prepopulate }); </script>
以上がKnockoutJs でのフォーム イベント バインディングの仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。