目次
データを使用する
の各要素をレコードおよび属性名として扱います (例:
公开您的数据
Welcome to Ember.js
{{headerName}}
下一步...模板
ホームページ CMS チュートリアル &#&プレス Ember.js への参入パート 3: より深く掘り下げる

Ember.js への参入パート 3: より深く掘り下げる

Aug 30, 2023 pm 05:13 PM
データバインディング コンポーネント開発 詳しい情報

Ember.js への参入パート 3: より深く掘り下げる

Ember.js は強力だが独自の意見を持つフレームワークであることを認識し始めていただければ幸いです。まだ表面をなぞっただけなので、本当に役立つものを構築する前に、学ぶべきことはたくさんあります。今後も Ember スターター キットを使用していきます。シリーズのこのパートでは、Ember のデータにアクセスして管理する方法を確認します。


データを使用する

前の記事では、コントローラーで定義された静的な色の名前のセットを使用しました。

リーリー

これにより、コントローラーはデータを インデックス テンプレートに公開できるようになります。これはデモにとっては魅力的ですが、実際には、データ ソースはハードコードされた配列ではありません。

ここでモデルが登場します。モデルは、アプリケーションによって使用されるデータのオブジェクト表現です。これは、単純な配列、または RESTful JSON API から動的に取得されたデータの場合があります。データ自体には、モデルのプロパティを参照することでアクセスします。したがって、結果を次のように見ると:

リーリー

モデルで公開されるプロパティは次のとおりです:

    ###ログイン### ###手### ###年### ###性別###
  • モデルのプロパティを参照してデータ自体にアクセスします。
  • 上記のコードからわかるように、静的ストレージを定義できますが、ほとんどの場合、モデルの定義には Ember.Object を使用します。
  • Ember.Object
  • をサブクラス化すると、(たとえば、Ajax 呼び出し経由で) データを返し、モデルを定義できるようになります。コントローラーでデータを明示的に設定することもできますが、懸念事項の分離とコード編成のベスト プラクティスを遵守するために、モデルを作成することを常にお勧めします。
また、Ember Data という姉妹フレームワークを使用することもできます。これは ORM に似た API および永続ストアですが、この記事の執筆時点では流動的な状態であることを強調しておく必要があります。これには多くの可能性がありますが、現時点では

Ember.Object

を使用する方が安全です。 Discourse の共同創設者 Robin Ward は、Ember データなしで Ember を使用することについて素晴らしいブログ投稿を書きました。ここではそのプロセスの概要を説明しますので、詳しく説明します。

モデルの定義

以下の例では、非公式の Hacker News API を使用して、ニュース ソースから JSON ベースのデータを抽出します。このデータはモデルに保存され、後でコントローラーによってテンプレートに入力されるために使用されます。 API から返されたデータを見ると、使用するプロパティを理解できます。

リーリー すべてのタイトルとストーリー情報を含む items

属性を使用したいと考えています。 SQL データベースを使用した場合は、
items

の各要素をレコードおよび属性名として扱います (例:

title

url

id##) # など) はフィールド名として扱われます。これらのプロパティ名は、モデルを作成するための完璧なインターフェイスであるモデル オブジェクトのプロパティとして使用されるため、レイアウトを理解することが重要です。 Ember.Object はすべての Ember オブジェクトの主要な基本クラスであり、extend() メソッドを使用してモデルを作成するためにサブクラス化します。

これを行うには、
App.IndexRoute

を定義するコードの直後に次のコードを js/app.js に追加します。 リーリー App.Item

は Hacker News データのモデル クラスとして使用されますが、そのデータを取得または操作するメソッドはありません。したがって、これらを定義する必要があります:
リーリー

このコードを分解してみましょう。まず、Ember の reopenClass() メソッドを使用して、新しいメソッドを App.Item クラスに追加し、必要なメソッドを含むオブジェクトをそれに渡します。この例では、

all()

というメソッドのみが必要です。このメソッドは、Hacker News ホーム ページからすべての見出しを返します。 jQuery は Ember プロトコルの一部であるため、その単純な Ajax API を使用できます。 API は JSONP を使用して JSON データを返すため、$.getJSON() を使用して次のリクエストを行うことができます:

リーリー

"callback=?" は、これが JSONP リクエストであり、データ (取得後) が jQuery の Promise 機能を使用して定義された匿名コールバック ハンドラーに渡されることを jQuery に伝えます。 リーリー JSON データを Ember オブジェクトに簡単に挿入できます。 response パラメーターには JSON データが含まれているため、レコードをループして、ローカルの items

配列を

App.Item

のインスタンスで更新できます。最後に、
all()

が実行されると、新しく設定された配列が返されます。ここまでお話しましたが、要約してみましょう:

  • 通过使用 extend() 子类化 Ember.Object 来创建新模型类。
  • 使用 reopenClass() 添加模型方法。
  • 进行 Ajax 调用来检索您的数据。
  • 循环数据,创建 Item 对象并将其推入数组中。
  • 方法执行时返回数组。

如果您刷新index.html,您将看到没有任何变化。这是有道理的,因为模型刚刚被定义;我们还没有访问过它。


公开您的数据

控制器的作用类似于代理,使您可以访问模型的属性并允许模板访问它们以便动态渲染显示。除了从关联模型访问属性之外,控制器还可以存储需要持久保存的其他应用程序属性,而无需保存到服务器。

目前,我们的应用程序具有以下控制器(定义静态数据集的控制器):

App.IndexRoute = Ember.Route.extend({
  setupController: function(controller) {
    controller.set('content', ['red', 'yellow', 'blue']);
  }
});
ログイン後にコピー

我们可以使用 model 方法(又名模型钩子)直接将我们的模型与 App.IndexRoute 关联起来:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return App.Item.all();
  }
});
ログイン後にコピー

请记住,如果您自己没有显式定义控制器,那么 Ember 会定义您的控制器,这就是本例中发生的情况。

在幕后,Ember 创建 IndexController 作为 Ember.ArrayController 的实例,并使用 model 方法中指定的模型。

现在我们只需要更新索引模板即可访问新属性。打开index.html,我们可以看到以下Handlebars模板代码:

{{#each item in model}}
    <li>{{item}}</li>
{{/each}}
ログイン後にコピー

通过一个小更改(添加 title 属性),我们可以立即看到从 Hacker News API 返回的标题:

{{item.title}}

如果您现在刷新浏览器,您应该会看到类似以下内容的内容:

<h3 id="Welcome-to-Ember-js">Welcome to Ember.js</h3>
<ul><li>Persona is distributed. Today.</li>
<li>21 graphs that show America's health-care prices are ludicrous</li>
<li>10 000 concurrent real-time connections to Django</li>
<li>Docker, the Linux container runtime: now open-source</li>
<li>Let's Say FeedBurner Shuts Down…</li></ul>
ログイン後にコピー

如果您想显示更多信息,只需添加更多属性:

{{item.title}} - {{item.postedAgo}} by {{item.postedBy}}
ログイン後にコピー

刷新即可查看您所做的更新。这就是 Handlebars 的魅力所在;它使得向用户界面添加新数据元素变得微不足道。

正如我之前提到的,控制器还可以用于定义需要在应用程序的整个生命周期中保留的静态属性。例如,我可能想保留某些静态内容,如下所示:

App.IndexController = Ember.ObjectController.extend({
  headerName: 'Welcome to the Hacker News App',
  appVersion:  2.1
});
ログイン後にコピー

在这里,我将 Ember.ObjectController 子类化,为我的 index 路由和模板创建一个新的控制器。我现在可以转到 index.html 并更新我的模板以替换以下内容:

<h2 id="Welcome-to-Ember-js">Welcome to Ember.js</h2>
ログイン後にコピー

与:

<h2 id="headerName">{{headerName}}</h2>
ログイン後にコピー

模型是应用程序使用的数据的对象表示。

Handlebars 将采用我的控制器中的指定属性,并用其同名值动态替换 {{headerName}} 占位符。强调两件事很重要:

  • 通过遵守 Ember 的命名约定,我无需进行任何接线即可将控制器与索引模板一起使用。
  • 即使我显式创建了 IndexController,Ember 也足够聪明,不会覆盖通过路由关联的现有模型。

这是非常强大且灵活的东西!


下一步...模板

在 Ember 中处理数据并不困难。实际上,最困难的部分是使用网络上大量的各种 API。

事实上,我可以轻松地将 JSON 数据输入到 Ember 对象中,这使得管理变得更加容易 — 尽管我从来都不是客户端大型数据集的忠实粉丝,尤其是当表示为对象时.

这是我必须做更多测试的事情,我希望 Ember Data 能让这一切变得微不足道。

话虽如此,我在本文中简要介绍了模板。它们非常重要……以至于我想在自己的文章中讨论这个主题。因此,在下一篇文章中,我们将介绍如何利用 Handelbars 构建用户界面,并深入了解模板框架提供的各种指令。

以上がEmber.js への参入パート 3: より深く掘り下げるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQLを使用してSwiftUIにデータバインディング機能を実装する方法 MySQLを使用してSwiftUIにデータバインディング機能を実装する方法 Jul 30, 2023 pm 12:13 PM

MySQL を使用して SwiftUI にデータ バインディング機能を実装する方法 SwiftUI 開発では、データ バインディングによってインターフェイスとデータの自動更新が実現され、ユーザー エクスペリエンスが向上します。人気のリレーショナル データベース管理システムとして、MySQL は大量のデータを保存および管理できます。この記事ではMySQLを使ってSwiftUIにデータバインディング機能を実装する方法を紹介します。 MySQL データへの接続とクエリを提供する Swift のサードパーティ ライブラリ MySQLConnector を利用します。

Vue ドキュメントのデータ バインディング関数の詳細な説明 Vue ドキュメントのデータ バインディング関数の詳細な説明 Jun 20, 2023 pm 10:15 PM

Vue は、主にユーザー インターフェイスの構築に使用されるオープン ソースの JavaScript フレームワークです。 Vue の中核はデータ バインディングであり、データとビューの間の双方向バインディングを実現する便利で効率的な方法を提供します。 Vue のデータ バインディング メカニズムは、いくつかの特別な関数を通じて処理されます。これらの関数は、テンプレート内のデータを JavaScript オブジェクト内の対応するプロパティに自動的にバインドするのに役立ちます。これにより、JavaScript オブジェクト内のプロパティが変更されると、テンプレート内のデータも自動的にバインドされます。

v-once ディレクティブを使用して Vue でデータ バインディングの 1 回限りのレンダリングを実装する方法 v-once ディレクティブを使用して Vue でデータ バインディングの 1 回限りのレンダリングを実装する方法 Jun 11, 2023 pm 01:56 PM

Vue は、データ バインディング プロセスを簡素化するための多くの命令を提供する人気のあるフロントエンド JavaScript フレームワークであり、非常に便利な命令の 1 つが v-once です。この記事では、v-once ディレクティブの使用方法と、Vue でデータ バインドされたワンタイム レンダリングを実装する方法について詳しく説明します。 v-once 命令とは何ですか? v-once は Vue のディレクティブであり、その機能は要素またはコンポーネントのレンダリング結果をキャッシュして、後続の更新でレンダリング プロセスをスキップできるようにすることです。

Vue エラー: v-model は双方向データ バインディングに正しく使用できません。解決方法は? Vue エラー: v-model は双方向データ バインディングに正しく使用できません。解決方法は? Aug 19, 2023 pm 08:46 PM

Vue エラー: v-model は双方向データ バインディングに正しく使用できません。解決方法は?はじめに: 双方向データ バインディングは、Vue で開発する場合に非常に一般的で強力な機能です。ただし、場合によっては問題が発生することがあります。つまり、双方向データ バインディングに v-model を使用しようとすると、エラーが発生します。この記事では、この問題の原因と解決策について説明し、問題の解決方法を示すコード例を示します。問題の説明: Vue で v-model を使用しようとすると

Vue3のv-model関数の詳細説明:双方向データバインディングの応用 Vue3のv-model関数の詳細説明:双方向データバインディングの応用 Jun 18, 2023 am 10:25 AM

フロントエンド テクノロジの継続的な開発に伴い、人気のあるフロントエンド フレームワークとしての Vue も常に更新され、反復されています。最新バージョンの Vue3 には多くの新機能が導入され、より便利で柔軟に使用できるようになりました。中でも v-model 機能は Vue3 の注目すべき新機能の 1 つです。双方向のデータバインディングを実現できます。つまり、v-model関数を使用すると、親コンポーネントと子コンポーネント間の通信を簡単に実現できるだけでなく、ユーザーが入力したデータを自動的にデータにバインドすることもできます。成分。

フォーム検証とデータ バインディングに Vue を使用する方法 フォーム検証とデータ バインディングに Vue を使用する方法 Aug 02, 2023 am 10:54 AM

フォーム検証とデータ バインディングに Vue を使用する方法 はじめに: フロントエンド開発の継続的な開発に伴い、ユーザー入力のフォーム検証が重要なリンクになっています。人気のあるフロントエンド フレームワークとして、Vue.js はフォーム検証とデータ バインディングのプロセスを簡素化する一連の関数を提供します。この記事では、フォーム検証とデータ バインディングに Vue を使用する方法を紹介し、対応するコード例を示します。 1. 基本的なデータ バインディング: Vue では、v-model ディレクティブを使用してデータの双方向バインディングを実現できます。入力要素を配置します

Vue 開発エクスペリエンスの概要: 開発チームのコラボレーション効率を向上させる Vue 開発エクスペリエンスの概要: 開発チームのコラボレーション効率を向上させる Nov 02, 2023 pm 01:27 PM

Vue.js は人気のあるフロントエンド開発フレームワークで、習得が簡単で、柔軟性、拡張性、効率性に優れているため、開発チームで広く使用されています。この記事では、開発チームのコラボレーション効率を向上させるために、Vue の開発経験をいくつかの側面からまとめます。 1. コンポーネントベースの開発の考え方 Vue.js の核となる考え方はコンポーネントベースの開発であり、複雑なアプリケーションを複数の独立したコンポーネントに分割して再利用性と保守性を高めます。開発プロセス中、チームメンバーはコンポーネント化のアイデアを十分に理解して適用し、コンポーネントを合理的に設計して分割し、コンポーネントを削減する必要があります。

Vue 開発ノート: よくある間違いや落とし穴を避ける Vue 開発ノート: よくある間違いや落とし穴を避ける Nov 23, 2023 am 10:37 AM

Vue 開発ノート: よくある間違いと落とし穴を避ける はじめに: Vue.js は、最新の対話型フロントエンド アプリケーションを構築するために広く使用されている人気のある JavaScript フレームワークです。 Vue.js はシンプルで柔軟かつ効率的な開発方法を提供しますが、開発プロセス中によくあるエラーや落とし穴に遭遇する可能性があります。この記事では、開発者がこれらの間違いや罠を回避し、開発効率とコード品質を向上させるために役立つ、Vue 開発に関する一般的な考慮事項をいくつか紹介します。注 1: v-if と

See all articles