ホームページ > 記事 > ウェブフロントエンド > BootstrapTable と KnockoutJS を組み合わせて追加、削除、変更、クエリ機能を実装する [1]_javascript スキル
bootstrap は、web 開発者にとって優れたものを解放するフロントエンド フレームワークです。bootstrap が提供する ui は非常にハイエンドで上品です。理論的には、css を 1 行記述する必要はありません。適切な属性をタグに追加するだけです。
knockoutjs は、javascript で実装された mvvm フレームワークです。とてもかっこいい。たとえば、リスト データ項目を追加または削除した後、コントロール フラグメント全体を更新したり、ノードを追加または削除するための js を自分で記述したりする必要はなく、その構文に準拠したテンプレートと属性を事前に定義するだけで済みます。意味。簡単に言うと、データ アクセスだけに注目する必要があります。
1. knockout.js の概要
1. knockout.js と mvvm
今では、さまざまなフロントエンド フレームワークが圧倒的で、眩しいばかりです。プログラマーであることは本当に難しいと嘆く必要はありません。学ばなければならないテクニックは常に無限にあります。変身しない限り、いつ終わることになるでしょうか。苦しみの海は無限です、引き返すか岸辺に行くか決めるのはあなた次第です!
knockout.js は、mvvm パターンに基づいた軽量のフロントエンド フレームワークです。どの程度軽量ですか?公式ウェブサイトに表示されている最新バージョン v3.4.0 によると、わずか 22kb です。データ モデルとインターフェイス dom のバインディングをフレンドリーな方法で処理できます。最も重要なことは、バインディングが双方向であることです。つまり、データ モデルが変更されると、インターフェイス dom 上のデータもそれに応じて変更されます。同様に、インターフェイス dom もそれに応じて変更され、データベース上のデータが変更されると、データ モデルもこの変更に応答します。これにより、フロントエンド コードの量が大幅に削減され、インターフェイスの保守が容易になり、大量のイベント監視データ モデルを作成したり、インターフェイス dom を変更したりする必要がなくなりました。以下のブロガーが使用例に基づいてこれら 2 つのポイントを説明します。
knockout.js 公式 web サイト: http://knockoutjs.com
knockout.js オープンソース アドレス: https://github.com/knockout/knockout
mvvm パターン: これは、ユーザー インターフェイスを作成するための設計パターンです。mvvm は、モデル、ビュー、ビューモデルの 3 つの部分に分割します。モデルはデータ モデル、ビューはビュー、ビューモデルはビュー モデルです。 . ビュー上のデータ モデルと dom 要素をバインドするために使用されます。 wpf と silverlight を使用したことがある場合は、これを理解するのは問題ありませんが、使用したことがない場合でも問題はありません。この記事を読むと、一般的な理解が得られます。
2. 最も単純な例
一般的にはつまり、knockout.js を最初から使い始める場合は、少なくとも次の 4 つの手順を実行する必要があります
2.1。公式 web サイトにアクセスして、 knockout.js ファイルを作成し、それを引用して表示ページに移動します。
<script src="~/scripts/knockout/knockout-3.4.0.min.js"></script>
注:knockout.js は jquery のサポートを必要としません。プロジェクトで jquery 関連の操作を使用する必要がある場合は、jquery を引用してください。 ; それ以外の場合は、上記のファイルを参照するだけです。
2.2. viewmodel の定義
viewmodel とは何ですか?実際、js では、これは json オブジェクトのように見えます。ビューモデルを定義します。
var myviewmodel = { name: "lilei", profession: "软件工程师", };
2.3、ビュー ビューでラベル バインディング データバインドを定義します
<div> 姓名:<label data-bind="text:name"></label><br /> 职业:<input type="text" data-bind="textinput:profession" /> </div>
注: input タグに対応するテキストは textinput を使用する必要がありますが、通常のタグのテキストはテキストにすることができます。
2.4. バインディングを有効にする
上記の 3 つの手順を完了したら、ノックアウト バインディングも有効にする必要があります。
/ >
ko.applybindings(myviewmodel);
これら 4 つの手順を実行することで、基本的に最も単純なビューモデル データ バインディングが実現されます。
十分に注意していれば、ko.applybindings() メソッドには 2 つのパラメータがあることがわかります。1 つ目はバインドする必要があるビューモデルです。2 つ目は何でしょうか? ko.applybindings(myviewmodel); から、2 番目のパラメータがオプションのパラメータであり、ビューモデルにバインドされたラベルのスコープを表すことがわかります。たとえば、上記のコードを変更してみましょう:
<div> 姓名:<label id="lb_name" data-bind="text:name"></label><br /> 职业:<input type="text" data-bind="textinput:profession" /> </div> ko.applybindings(myviewmodel,document.getelementbyid("lb_name"));
2 番目のパラメータが myviewmodel のスコープを制限していることがわかります。つまり、id= のラベルにバインドされている場合にのみ有効になります。 lb_name"。2 番目のパラメータは div などのコンテナ タグで、バインディングのスコープが div の下のすべてのサブタグであることを示します。
3. 属性の監視
上記4ステップまで、何も効果は見られず、json オブジェクトのデータを html タグにバインドしていることだけが表示されます。これを行う意味は何でしょうか?単純な問題を複雑にしていませんか?心配しないで、今すぐ奇跡を目撃してください!上で述べたように、ノックアウトの最も重要な意味は双方向バインディングです。では、どうすれば双方向バインディングを実現できるでしょうか?答えは、プロパティを監視することです。
ノックアウトには、observables、dependentobservables、observablearray という 3 つの主要な監視属性があります。observe の意味は観測と訳されます。これを観測属性または観測と呼ぶのは適切ではありません。非常に適切なので、ここでは監視属性と呼びましょう。
3.1. observables: プロパティのモニタリング
上記の例を次のように変更します。
p >
index3 <script src="~/scripts/knockout/knockout-3.4.0.min.js"></script> <div> 姓名:<label data-bind="text:name"></label><br /> 职业:<input type="text" data-bind="textinput:profession" /> </div>
ko.observable("lilei") この文の意味は、ビューモデルの name 属性を監視属性として追加することです。name 属性が監視属性になると、何か魔法のようなことが起こります。 myviewmodel を書き込みます。次の場合:
名前が元の属性からメソッドに変更されます。つまり、ko.observable() が追加されると、対応する属性は次のようになります。メソッドの場合は、myviewmodel.name()を使用してnameの値の取得と代入を処理する必要があります。
コードの説明: 明らかに myviewmodel.name($(this).val()); この文は、現在のテキスト ボックスの値を name 属性に割り当てます。インターフェイスは name 属性にバインドされているため、ラベルの値もそれに応じて変更されます。または、これは textchange イベントを使用して行うこともできます。現在のテキスト ボックスの値がラベル label に割り当てられている限り、この効果も達成できます。これは何もありません。確かに、あなたの書き方で目的は達成できますが、監視属性の重要性は、name の値がどこかで変更されると、それに応じてインターフェイスも変更されるということです。ラベル タグに値をあらゆる場所に割り当てる代わりに、js は次のことだけを行う必要があります。 myviewmodel.name() メソッドをクリックするだけです。素晴らしいですね~~
3.2. dependentobservables: 依存関係属性のモニタリング
上記のモニタリング属性を読んでも面白くない場合は、 ?監視依存関係属性の使用法を見てみましょう。
コードを変更して見てみましょう:
index3 <script src="~/scripts/knockout/knockout-3.4.0.min.js"></script>姓名:
职业:
描述:
コードの説明: モニタリングを追加することによって依存属性 ko.dependentobservable() は、名前と職業の両方の変更に対する des 属性の値を同時に監視できます。いずれか 1 つが変更された場合、des にバインドされたラベルが変更をトリガーします。これの最大の利点は、これにより、js を移動する必要がなくなりました。dom を操作する手間は少し興味深いです。
3.3. observablearray; 配列の監視
上記の 2 つに加えて、ko は配列オブジェクトの監視もサポートしています。例を見てみましょう:
index3 <script src="~/scripts/knockout/knockout-3.4.0.min.js"></script>
コードの説明: 上記は ko によるものです。 observablearray() このメソッドは、配列オブジェクトの監視を追加します。つまり、js 内の任意の場所で deptarr 配列オブジェクトに配列の変更が行われる限り、ui がトリガーされて対応する応答が返されます。注意すべき点は、監視対象の配列は実際には監視対象の配列オブジェクトそのものであり、配列オブジェクト内のサブオブジェクトのプロパティの変更は監視できないということです。たとえば、クリック イベントを次のように変更します。
$(function () { $("#btn_test").on("click", function () { deptarr[1].name = "aaa"; }); });
これは、配列監視が実際には配列オブジェクト自体を監視し、配列内の要素の属性の変更を監視しないことを示しています。データ内のオブジェクトの属性変更を本当に監視する必要がある場合は、データ内のオブジェクト属性に対して ko.observable() を使用し、この 2 つを一緒に使用する必要があります。興味のある方は試してみてはいかがでしょうか。
4. ko の一般的なデータバインド属性
上記、複数のデータバインド属性を使用したため、ノックアウトにはそのようなデータバインド属性がいくつ存在するか。ここでは、一般的に使用されるプロパティをいくつかリストします。
4.1、テキストと inputtext
テキストは、名前が示すようにテキストを意味します。このバインディング属性は通常使用されます。