JavaScriptのBackbone.jsフレームワークにおけるViewビューの説明例_基礎知識
バックボーンのビューは、アプリ内のモデルの外観を反映するために使用されます。彼らはイベントをリッスンし、それに応じて反応します。
次のチュートリアルでは、モデルとコレクションをビューにバインドする方法については説明しません。代わりに、ビューが JavaScript テンプレート ライブラリ、特に Underscore.js の _.template をどのように使用するかに焦点を当てます。
ここでは、jQuery を使用して DOM 要素を操作します。もちろん、MooTools や Sizzle などの他のライブラリを使用することもできますが、Backbone の公式ドキュメントでは jQuery を使用することを推奨しています。
次に、検索ボックスを例として新しいビューを作成してみましょう:
SearchView = Backbone.View.extend({ initialize: function(){ alert("Welcome to Backbone!"); } }); var search_view = new SearchView();
モデル、ビュー、コレクションのいずれであっても、initialize() メソッドはインスタンス化されるときに自動的にトリガーされます。
エル属性
el 属性は、ブラウザーで作成された DOM オブジェクトを参照します。これが定義されていない場合、Backbone は空の div 要素を el 属性として作成します。
View の el 属性を作成し、#search_containe に設定しましょう。
<div id="search_container"></div> <script type="text/javascript"> SearchView = Backbone.View.extend({ initialize: function(){ alert("Welcome to Backbone!"); } }); var search_view = new SearchView({ el: $("#search_container") }); </script>
このとき、Viewのel属性はsearch_containerのidを持つdiv要素を参照しています。これでこの div 要素をバインドしたので、トリガーしたいイベントはすべてこの div 要素内に存在する必要があります。
テンプレートをロード
Backbone は Underscore.js に強く依存しているため、Underscore.js の小さなテンプレートを使用できます。
ここで、 render() メソッドを追加し、initialize() で呼び出して、ビューの初期化時に render() メソッドが自動的にトリガーされるようにしましょう。
この render() メソッドは、jQuery を通じてテンプレートをビューの el 属性に読み込みます。
<script type="text/template" id="search_template"> <label>Search</label> <input type="text" id="search_input" /> <input type="button" id="search_button" value="Search" /> </script> <div id="search_container"></div> <script type="text/javascript"> SearchView = Backbone.View.extend({ initialize: function(){ this.render(); }, render: function(){ // 通过 Underscore 编译生成模板 var template = _.template( $("#search_template").html(), {} ); //讲生成的模板加载到 el 属性中 this.$el.html( template ); } }); var search_view = new SearchView({ el: $("#search_container") }); </script>
リスニングイベントを追加
リスニング イベントを追加するには、View の events 属性を使用します。リスニング イベントは el 属性の子要素にのみ追加できることに注意してください。次に、子要素のボタンにリスナー イベントを追加しましょう。
<script type="text/template" id="search_template"> <label>Search</label> <input type="text" id="search_input" /> <input type="button" id="search_button" value="Search" /> </script> <div id="search_container"></div> <script type="text/javascript"> SearchView = Backbone.View.extend({ initialize: function(){ this.render(); }, render: function(){ var template = _.template( $("#search_template").html(), {} ); this.$el.html( template ); }, events: { "click input[type=button]": "doSearch" }, doSearch: function( event ){ // 当 button 被点击时触发 alert alert( "Search for " + $("#search_input").val() ); } }); var search_view = new SearchView({ el: $("#search_container") }); </script>
パラメータをテンプレートに渡します
テンプレートは、ビューから渡されたパラメータを <%= %> の形式で使用できます。
<script type="text/template" id="search_template"> <!-- 通过 <%= %> 形式使用传来的参数 --> <label><%= search_label %></label> <input type="text" id="search_input" /> <input type="button" id="search_button" value="Search" /> </script> <div id="search_container"></div> <script type="text/javascript"> SearchView = Backbone.View.extend({ initialize: function(){ this.render(); }, render: function(){ //定义需要传递的参数 var variables = { search_label: "My Search" }; // 通过 Underscore 生成模板,同时传递参数 var template = _.template( $("#search_template").html(), variables ); // Load the compiled HTML into the Backbone "el" this.$el.html( template ); }, events: { "click input[type=button]": "doSearch" }, doSearch: function( event ){ alert( "Search for " + $("#search_input").val() ); } }); var search_view = new SearchView({ el: $("#search_container") }); </script>
DOM イベントの処理
ビューの非常に重要な機能は、インターフェイス イベントを自動的にバインドできるようにすることです。以前にイベントをインターフェイス ラベルにバインドした方法を思い出してください。次のようになります:
<p> <input type="button" value="Create" id="create" /> <input type="button" value="Read" id="read" /> <input type="button" value="Update" id="update" /> <input type="button" value="Delete" id="delete" /> </p> <script type="text/javascript"> function createData() { // todo } function readData() { // todo } function updateData() { // todo } function deleteData() { // todo } $('#create').on('click', createData); $('#read').on('click', readData); $('#update').on('click', updateData); $('#delete').on('click', deleteData); </script>
これは、jQuery を介して DOM イベントをバインドする典型的な例です。複雑なアプリケーションを開発している場合、または開発したことがある場合は、これらのコードを何らかの方法でより適切に整理して、構造をより明確にし、保守しやすくすることを試みたことがあるかもしれません。
Backbone のビュー オブジェクトは、DOM とイベントの間の関係をより適切に維持するためのイベントの自動バインディング メカニズムを提供します。次の例を見てみましょう:
<p id="view"> <input type="button" value="Create" id="create" /> <input type="button" value="Read" id="read" /> <input type="button" value="Update" id="update" /> <input type="button" value="Delete" id="delete" /> </p> <script type="text/javascript"> var MyView = Backbone.View.extend({ el : '#view', events : { 'click #create' : 'createData', 'click #read' : 'readData', 'click #update' : 'updateData', 'click #delete' : 'deleteData' }, createData : function() { // todo }, readData : function() { // todo }, updateData : function() { // todo }, deleteData : function() { // todo } }); var view = new MyView(); </script>
この例では、ビュー ID を持つラベルに 4 つのボタンを配置し、このラベルをビュー クラス MyView に関連付けます。
ビュー クラスを定義するときに、次のようにビュー内のユーザー イベントのリストを表す events 属性を宣言しました:
事件名称 选择器 : 事件处理函数
ビュー オブジェクトは、イベント リスト内の説明を自動的に解析します。つまり、jQuery または Zepto を使用して、セレクターによって記述された DOM オブジェクトを取得し、イベント ハンドラー関数をイベント名にバインドします。これらの操作は、ビュー クラスがインスタンス化されるときに自動的に完了します。イベントをバインドする方法を意図的に考える代わりに、ビュー クラス自体の構造に注意を払うことができます。
You may be worried about another question: If the DOM structure of the view is dynamically generated, does Backbone provide corresponding methods for dynamically binding and unbinding events?
In fact, you don't need to worry about this issue, because the events in events are bound to the el element of the view object through the delegate() method, not the element described by the selector. Therefore, no matter how the structure within the view changes, the events in events are valid.
(If you are familiar with jQuery, you may know about the delegate() method it provides. This method actually binds the event to the parent element, and then triggers the event by checking the target child element during the event bubbling process.)
The view object binds events through the delegate() method, which means that we do not need to care about the impact of changes in the view structure on events. It also means that the element corresponding to the selector in events must be within the el element of the view, otherwise the bound The event cannot take effect.
Nonetheless, in some cases we may still need to manually bind and unbind events. The view object provides delegateEvents() and undelegateEvents() methods for dynamically binding and unbinding the event list. You can check the API documentation to do so. Learn about them.
Rendering views and data
Views are mainly used for interface event binding and data rendering. However, the view object only provides one method related to rendering, render(), and it is an empty method without any logic and not referenced anywhere. We need to overload it to implement our own rendering logic.
Views may contain a lot of interface logic. It is recommended that all view subclasses overload the render() method and use it as the entry method for final rendering. In team development, coding strictly according to specifications can help others better understand and maintain your code.

ホット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 接続における全二重方式です。

SpringBoot と SpringMVC を比較し、その違いを理解する Java 開発の継続的な発展に伴い、Spring フレームワークは多くの開発者や企業にとって最初の選択肢となっています。 Spring エコシステムでは、SpringBoot と SpringMVC の 2 つの非常に重要なコンポーネントです。どちらも Spring フレームワークをベースにしていますが、機能や使用方法にいくつかの違いがあります。この記事では、SpringBoot と Spring の比較に焦点を当てます。

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

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

Word の組版スキルを学びたい学生は多いと思いますが、編集者は、組版スキルを学ぶ前に Word のビューをしっかり理解する必要があるとこっそり教えてくれます。Word2007 では、ユーザーが選択できる 5 つのビューが用意されています。ビューにはページが含まれます。ビュー、読書レイアウト ビュー、Web レイアウト ビュー、アウトライン ビュー、および通常ビュー、今日はエディターでこれら 5 つの単語ビューについて学びましょう。 1. ページ ビュー ページ ビューは、主にヘッダー、フッター、グラフィック オブジェクト、段組み設定、ページ余白などの要素を含む Word2007 文書の印刷結果の外観を表示することができ、印刷結果に最も近いページ ビューです。 2. 読書レイアウト ビュー 読書レイアウト ビューでは、本の段組みスタイルで Word2007 ドキュメントと Office が表示されます。

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