JavaScriptのMVCパターンについて語る_基礎知識
原文: Model-View-Controller (MVC) with JavaScript
著者: Alex@Net
翻訳: JavaScript の MVC パターン
翻訳者: justjavac
この記事では、JavaScript でのモデル ビュー コントローラー パターンの実装を紹介します。
私は JavaScript が大好きです。なぜなら、JavaScript は世界で最も柔軟な言語の 1 つだからです。 JavaScript では、プログラマは好みに応じて、手続き型またはオブジェクト指向のプログラミング スタイルを選択できます。 ヘビー ユーザーであれば、JavaScript を使用するとプロセス指向、オブジェクト指向、アスペクト指向などを簡単に処理できます。JavaScript を使用すると、開発者は関数型プログラミング手法を使用することもできます。
この記事での私の目標は、JavaScript の威力を皆さんに示すために、簡単な JavaScript コンポーネントを作成することです。 このコンポーネントは編集可能な項目リスト (HTML の選択タグ) です。ユーザーは項目を選択して削除したり、リストに新しい項目を追加したりできます。 このコンポーネントは、MVC デザイン パターンのモデル ビュー コントローラーに対応する 3 つのクラスで構成されます。
この記事は単なるガイドです。 実際のプロジェクトで使用する場合は、適切な変更を加える必要があります。 JavaScript プログラムを作成して実行するために必要なものはすべて揃っていると思います。頭脳、手、テキスト エディター (メモ帳など)、ブラウザー (私のお気に入りの Chrome など)。
コードでは MVC パターンを使用するため、ここでこの設計パターンを簡単に紹介します。 MVC パターンの英語名は Model-View-Controller パターンです。その名前が示すように、その主要な部分は次のとおりです。
•Model()、プログラムで使用されるデータを保存するために使用されます。•ビュー、さまざまな形式でデータを表示するために使用されます。
•コントローラー (コントローラー)、モデルを更新しました。
Wikipedia の MVC アーキテクチャの定義では、次の 3 つの部分で構成されています。
ビュー - ビュー レイヤーにより、データ (通常はユーザー インターフェイス要素) を目的に応じて表示できます。 通常、ビューには手続き型ロジックはありません。 Web アプリケーションの MVC では、動的データを表示する HTML ページは通常、ビューと呼ばれます。
コントローラー (コントローラー) - イベント (通常はユーザー操作) を処理して応答し、モデル上の変更を監視して、ビューを変更します。
コンポーネントのデータは項目のリストであり、その中で特定の項目を 1 つ選択して削除できます。コンポーネントのモデルは非常に単純です。データは配列プロパティと選択された項目プロパティに保存されます。それは:
MVC に基づいてデータ リスト コンポーネントを実装します。リスト内の項目は選択および削除できます。 したがって、コンポーネント モデルは非常に単純です。必要なプロパティは 2 つだけです:
1. 配列 _items はすべての要素を格納するために使用されます
2. 通常の変数 _selectedIndex は選択された要素のインデックスを格納するために使用されます
コードは次のとおりです:
/**
*モデル。
*
* モデルはすべての要素を保存し、状態が変化したときにオブザーバーに通知します。
*/
function ListModel(items) {
this._items = items; // すべての元素
this._selectedIndex = -1; // 被選択要素のインデックス
this.itemAdded = 新しいイベント (この);
this.itemRemoved = 新しいイベント (この);
this.selectedIndexChanged = 新しいイベント (この);
}
ListModel.prototype = {
getItems : function () {
return [].concat(this._items);
},
addItem : function (item) {
this._items.push(item);
this.itemAdded.notify({item : item});
},
removeItemAt : function (index) {
var item;
item = this._items[index];
this._items.splice(index, 1);
this.itemRemoved.notify({item : item});
if (index === this._selectedIndex) {
this.setSelectedIndex(-1);
}
},
getSelectedIndex : function () {
return this._selectedIndex;
},
setSelectedIndex : function (index) {
varPreviousIndex;
previousIndex = this._selectedIndex;
this._selectedIndex =index;
this.selectedIndexChanged.notify({previous :PreviousIndex});
}
};
イベントは単一の実現された観察者モード (観察者パターン) の種類:
function Event(sender) {
this._sender = sender;
this._listeners = [];
}
Event.prototype = {
attach : function (listener) {
this._listeners.push(listener);
},
Notice : function (args) {
varindex;
for (index = 0;index
}
}
};
View クラスには、相互に通信するためにコントローラーの種類を指定する必要があります。 ただし、このタスクにはさまざまなインターフェースがある可能性がありますが、最も単一であることが望ましいです。 2 つの選択: 「追加」は項目を追加し、「選択」は選択された項目を削除します。 コンポーネントによって提供される「選択」機能には、コントロールの生成機能のサポートが必要です。
1 つのビュー クラスはコントローラ クラス上で定義されており、その中で「…コントローラはユーザー入力イベントを処理し、通常は登録済みの返還関数によって行われます」(wikipedia.org)。次はビューとコントローラーです:
/**
* 表示します。
*
* ビューはモデル データを表示し、UI イベントをトリガーします。
* コントローラーは、これらのユーザー インタラクション イベントを処理するために使用されます
*/
function ListView(model, elements) {
this._model = model;
this._elements = elements;
this.listModified = 新しいイベント (この);
this.addButtonClicked = 新しいイベント (この);
this.delButtonClicked = 新しいイベント (この);
var _this = this;
// 绑定モデル监听器
this._model.itemAdded.attach(function () {
_this.rebuildList();
});
this._model.itemRemoved.attach(function () {
_this.rebuildList();
});
// 将监听器は HTML コントロール上に設定されます
this._elements.list.change(function (e) {
_this.listModified.notify({index : e.target.selectedIndex });
});
this._elements.addButton.click(function () {
_this.addButtonClicked.notify();
});
this._elements.delButton.click(function () {
_this.delButtonClicked.notify();
});
}
ListView.prototype = {
show : function () {
this.rebuildList();
},
rebuildList : function () {
var list, items, key;
list = this._elements.list;
list.html('');
items = this._model.getItems();
for (項目にキーを入力) {
if (items.hasOwnProperty(key)) {
list.append($(''));
}
}
this._model.setSelectedIndex(-1);
}
};
/**
* コントローラー。
*
* コントローラーはユーザーの操作に応答して、モデルの変更関数を呼び出します。
*/
function ListController(model, view) {
this._model = model;
this._view = view;
var _this = this;
this._view.listModified.attach(function (sender, args) {
_this.updateSelected(args.index);
});
this._view.addButtonClicked.attach(function () {
_this.addItem();
});
this._view.delButtonClicked.attach(function () {
_this.delItem();
});
}
ListController.prototype = {
addItem : function () {
var item = window.prompt('Add item:', '');
if (item) {
これ。 _model.addItem(item);
}
},
delItem : function () {
varindex;
index = this._model.getSelectedIndex();
if (index !== -1) {
this._model.removeItemAt(this._model.getSelectedIndex());
}
},
updateSelected : function (index) {
this._model.setSelectedIndex(index);
}
};
当然、モデル、ビュー、コントローラーの種類が適切に例示されます。
以下は、この MVC を使用する完全なコードです:
$(function () {
var model = new ListModel(['PHP', 'JavaScript']),
view = new ListView(model, {
'list' : $('#list'),
'addButton' : $('#plusBtn'),
'delButton' : $( '#minusBtn')
}),
controller = new ListController(model, view);
view.show();
});

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが
