目錄
核心概念
設定 Ember
余烬之地的布局
模板
路由
模型
控制器
观看次数
命名约定
首頁 CMS教程 &#&按 擁抱 Ember.js 的世界

擁抱 Ember.js 的世界

Sep 02, 2023 pm 09:41 PM

拥抱 Ember.js 的世界

有許多可用的 JavaScript 函式庫,其中大多數都非常擅長提供典型網站所需的傳統的以 DOM 為中心的互動。但是,當需要為單頁應用程式建立可管理的程式碼庫時,就需要一整套新框架來解決問題。

# 老話說得好:「用最好的工具完成任務」。

並不是說像 jQuery 這樣的傳統函式庫不能幫助您建立類似桌面的體驗,它只是不是它的用例,並且缺少資料綁定、事件路由和狀態管理等功能。當然,您可能可以拼湊一堆插件來實現其中一些功能,但在我看來,從專門從頭開始構建的框架來解決這些特定問題更有意義。老話說得好:「用最好的工具完成任務。」

我最近接受了 Ember.js 團隊的採訪;我的動機是想要了解我所說的「新熱點」:Ember.js。

Ember 符合我上面描述的要求,並且以一種讓人想起 jQuery 如何讓開發人員快速啟動和運行的方式。該團隊特意採取措施,利用多年從構建大型應用程式中獲得的專業知識和知識,抽象化了設計和構建基於模型/視圖/控制器的應用程式所固有的許多複雜性。

我想做的是透過一個由多部分組成的文章系列來幫助您加快使用 Ember.js 的速度,該系列文章將逐步向您介紹該框架的概念。我們將從通常的介紹開始(恰好是這篇文章),然後逐漸建立一個完整的應用程式。最重要的是,這也將幫助我強化我已經學到的概念,也許還能學到一些新技術!我會盡力讓 Ember.js 團隊審查此資料的準確性,甚至可能為其貢獻一些有價值的內容。

在我們繼續之前,請注意:Ember.js 為您帶來了很多魔力。有時您會看著程式碼並說「啊?它是怎麼做到的?」我已經去過那裡了,我會盡力提煉一些東西,但我不會深入研究 Ember 框架程式碼的內部。相反,我將討論如何利用其工具和 API 來建立您的應用程式。

所以讓我們開始吧。


核心概念

Ember.js 不是建立傳統網站的框架。

首先要記住的是,Ember.js 不是用來建立傳統網站的框架。像 jQuery 和 MooTools 這樣的函式庫非常適合這一點。如果您正在考慮 Ember.js,那麼我們的假設是您正在尋求建立類似桌面的體驗 - 尤其是可擴展的體驗。事實上,該框架的口號是“一個用於開發雄心勃勃的 Web 應用程式的框架”,這告訴您它顯然不是您爸爸的 JavaScript 庫。

我之前提到過,Ember 利用 MVC 模式來促進正確的程式碼管理和組織。如果您從未進行過基於 MVC 的開發,那麼您絕對應該閱讀它。 Nettuts 有一篇關於該主題的精彩文章。對於熟悉這些概念的人來說,您應該有賓至如歸的感覺。我一直聽到的一件事是,從 Backbone 遷移到 Ember.js 實際上很容易,因為 Ember 為您做了很多繁重的工作,同時仍然保持那些開發人員習慣的程式碼組織模式。 p>

Ember 也依賴客戶端模板......很多。它使用 Handlebars 模板庫,該庫提供允許您建立基於 HTML 的動態模板的表達式。 Ember 開發人員可以將資料綁定到這些可嵌入表達式,並動態變更其應用程式的顯示。例如,我可以建立一個模板,該模板可以接收一組人員並將其顯示在無序列表中:

<ul>
 {{#each people}}
   <li>Hello, {{name}}!</li>
 {{/each}}
</ul>
登入後複製

注意“#each”表達式用作循環指令,枚舉“people”數組的每個元素並將“{{name}}”表達式替換為實際值。需要注意的是,雙括號是 Handlebars 用來辨識表達式的標記。這是一個小範例,稍後我們將深入了解更多細節。

Handlebars 是一個非常強大的客戶端模板引擎,我建議不僅查看 Ember 指南,還查看 Handlebars 網站本身,以充分掌握可用的選項。您將會經常使用它。


設定 Ember

Ember.js 依賴其他函式庫,因此您需要取得 jQuery 和 Handlebars 的副本。但是,等等,我不是說過 jQuery 和 Ember 在不同的空間發揮作用嗎?嗯,是的,我做到了,但事情是這樣的:Ember 團隊致力於不重新發明輪子。他們選擇 jQuery 來做它最擅長的事:使用 DOM。這是一件好事,因為 jQuery 在這方面確實很擅長。這也是他們選擇 Handlebars 的原因,這是一個出色的模板庫,恰好由 Ember 核心團隊成員 Yehuda Katz 編寫。

取得所需檔案的最簡單方法是存取 Ember.js Github 儲存庫並下載入門工具包。這是供您開始使用的樣板。在撰寫本文時,它包含:

  • 人类 1.0 RC1
  • 处理栏 1.0 RC3
  • jQuery 1.9.1

还有一个基本的 html 模板,其编码包含所有关联的库(jQuery、Ember 等),以及 Handlebars 模板和“app.js”的示例,其中包含用于启动基本的 Ember 应用程序。

<script src="js/libs/jquery-1.9.1.js"></script>
<script src="js/libs/handlebars-1.0.0-rc.3.js"></script>
<script src="js/libs/ember-1.0.0-rc.1.js"></script>
<script src="js/app.js"></script>
登入後複製

请注意,app.js 不是框架的一部分。这是一个普通的 ole JavaScript 文件;您可以将其命名为任何您想要的名称。而且,虽然我们将在本教程系列中使用它,但以后您可能最终会将 JavaScript 拆分为多个文件,就像处理任何其他网站或应用程序一样。此外,Ember 并不期望您的框架文件有特定的目录结构。

当您查看入门工具包代码时,它可能看起来像典型的网站代码。从某些方面来说,你是对的!不过,一旦我们开始组织事情,您就会看到构建 Ember 应用程序有何不同。


余烬之地的布局

在开始编写代码之前,了解 Ember.js 的工作原理以及了解构成 Ember 应用程序的移动部件非常重要。让我们看一下这些部分以及它们之间的关系。


模板

模板是定义用户界面的关键部分。正如我之前提到的,Handlebars 是 Ember 中使用的客户端库,在为应用程序创建 UI 时广泛使用该库提供的表达式。这是一个简单的例子:

<script type="text/x-handlebars">
     <h2><strong>{{firstName}} {{lastName}}</strong></h2>
</script>
登入後複製

请注意,表达式会混合到 HTML 标记中,并通过 Ember 动态更改页面上显示的内容。在这种情况下,{{firstName}} 和 {{lastName}} 占位符将被从应用检索的数据替换。

Handlebars 通过灵活的 API 提供强大的功能。了解它提供的功能对您来说非常重要。


路由

应用程序的路由器有助于管理应用程序的状态。

应用程序的路由器有助于管理应用程序的状态以及用户导航应用程序时所需的资源。这可能包括从模型请求数据、将控制器连接到视图或显示模板等任务。

您可以通过为应用程序中的特定位置创建一条路线来实现此目的。路由指定应用程序的各个部分以及与其关联的 URL。 URL 是 Ember 用于了解需要向用户呈现哪种应用程序状态的关键标识符。

App.Router.map( function() {
   this.route( 'about' ); // Takes us to "/about"
});
登入後複製

路由的行为(例如:从模型请求数据)通过 Ember 路由对象的实例进行管理,并在用户导航到特定 URL 时触发。一个示例是从模型请求数据,如下所示:

App.EmployeesRoute = Ember.Route.extend({
   model: function() {
       return App.Employee.find();
   }
});
登入後複製

在本例中,当用户导航到应用程序的“/employees”部分时,路由会向模型请求所有员工的列表。


模型

数据的对象表示。

模型是应用程序将使用的数据的对象表示。它可以是一个简单的数组或通过 Ajax 请求从 RESTful JSON API 动态检索的数据。 Ember 数据库提供了用于在应用程序中加载、映射和更新数据到模型的 API。


控制器

控制器通常用于存储和表示模型数据和属性。它们就像代理一样,使您可以访问模型的属性并允许模板访问它们以动态渲染显示。这就是模板始终连接到控制器的原因。

要记住的主要事情是,当模型检索数据时,您将使用控制器以编程方式将该数据公开给应用程序的不同部分。虽然模型和控制器看起来紧密耦合,但事实上,模型本身并不知道稍后将使用它们的控制器。

您还可以存储需要保留但不需要保存到服务器的其他应用程序属性。


观看次数

Ember.js 中的视图旨在管理围绕用户交互的事件,并将其转换为在应用程序中有意义的事件。因此,如果用户单击按钮来删除员工,则视图负责解释本机浏览器单击事件并在应用程序当前状态的上下文中对其进行适当处理。


命名约定

Ember.js 帮助最大程度地减少所需代码量并在幕后为您处理事务的方法之一是通过命名约定。定义和命名路由(和资源)的方式会影响控制器、模型、视图和模板的命名。例如,如果我创建一条名为“employees”的路线:

App.Router.map( function() {
   this.resource( 'employees' );
});
登入後複製

然后我会命名我的组件,如下所示:

  • 路由物件: App.EmployeesRoute
  • #控制器: App.EmployeesController
  • 模型:
  • App.Employee
  • 檢視:
  • App.EmployeesView
  • #範本:
  • 員工

使用此命名約定有雙重目的。首先,它為您提供了類似組件之間的語義關係。其次,Ember 可以自動建立可能不存在的必要物件(例如:路由物件或控制器)並將它們連接起來以便在您的應用程式中使用。這就是我前面提到的「魔力」。事實上,當您實例化 Application 物件時,這就是 Ember 在全域應用程式層級所做的具體操作:

var App = Ember.Application.create();

    此單行會建立對應用程式的路由器、控制器、檢視和範本的預設參考。
  • 路由物件:
  • App.ApplicationRoute
  • 控制器:
  • App.ApplicationController
  • 檢視:
  • App.ApplicationView
  • 模板:
  • 應用程式

    回到我上面建立的「employees」路由,當使用者導航到應用程式中的「/employees」時,Ember 將會尋找以下物件:
  • App.EmployeesRoute
  • App.EmployeesController
  • 員工
範本

如果沒有找到它們,它將建立每個實例的實例,但不會渲染任何內容,因為您尚未指定從中衍生資料的模型或用於顯示資料的範本。這就是命名約定如此重要的原因。它讓 Ember 知道如何處理與特定路線相關的任務,而無需您手動進行連線。

請注意,在第一個範例中,我使用單數名稱「Employee」來定義模型。這是故意的。 「員工」這個名稱的本質決定了我可能會與 0 到多名員工一起工作,因此建立一個可以靈活返回一名員工或所有員工的模型非常重要。此模型的單一命名約定不是 Ember 的要求,因為模型本身不知道稍後將使用它們的控制器。因此,您可以靈活地命名它們,但為了保持一致性,堅持此約定將使您的程式碼管理變得更加容易。 此外,我選擇使用

resource()

方法來定義我的路由,因為在這種情況下,我很可能會使用嵌套路由來管理特定員工資訊的詳細資訊頁面。我們將在本系列後面討論嵌套。

關鍵要點是,透過使用一致的命名方案,Ember 可以輕鬆管理將這些元件綁定在一起的掛鉤,而無需透過大量程式碼明確定義關係。

專案網站上提供了 Ember 命名約定的完整詳細信息,

必讀

下一步:建立應用程式

在本系列的下一部分中,我們將深入研究程式碼來為我們的應用程式建立基礎。

我們已經回顧了 Ember 的核心概念,並討論了該框架的關鍵高級方面。在本系列的下一部分中,我們將深入研究程式碼來為我們的應用程式建立基礎。在此期間,我想再次建議您開始查看 Handlebars 的文檔,以了解表達式語法。另外,如果您真的迫不及待地想要進入 Ember,請繼續關注 Tuts Premium,它將很快提供完整的課程,引導您建立基於 Ember 的應用程式!

正如我在本文開頭指出的,Ember.js 核心團隊領導 Yehuda Katz 和 Tom Dale 審查了此內容的準確性,並豎起大拇指。 Ember 團隊已獲批准!一會兒見! ######

以上是擁抱 Ember.js 的世界的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何在 WordPress 中獲取登錄用戶信息以獲得個性化結果 如何在 WordPress 中獲取登錄用戶信息以獲得個性化結果 Apr 19, 2025 pm 11:57 PM

最近,我們向您展示瞭如何通過允許用戶將自己喜歡的帖子保存在個性化庫中來為用戶創建個性化體驗。您可以通過在某些地方(即歡迎屏幕)使用他們的名字,將個性化結果提升到另一個水平。幸運的是,WordPress使獲取登錄用戶的信息變得非常容易。在本文中,我們將向您展示如何檢索與當前登錄用戶相關的信息。我們將利用get_currentuserinfo(); 功能。這可以在主題中的任何地方使用(頁眉、頁腳、側邊欄、頁面模板等)。為了使其工作,用戶必須登錄。因此我們需要使用

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

如何開始WordPress博客:初學者的分步指南 如何開始WordPress博客:初學者的分步指南 Apr 17, 2025 am 08:25 AM

博客是人們在網上表達觀點、意見和見解的理想平台。許多新手渴望建立自己的網站,卻因擔心技術障礙或成本問題而猶豫不決。然而,隨著平台不斷發展以滿足初學者的能力和需求,現在開始變得比以往任何時候都更容易。 本文將逐步指導您如何建立一個WordPress博客,從主題選擇到使用插件提升安全性和性能,助您輕鬆創建自己的網站。 選擇博客主題和方向 在購買域名或註冊主機之前,最好先確定您計劃涵蓋的主題。個人網站可以圍繞旅行、烹飪、產品評論、音樂或任何激發您興趣的愛好展開。專注於您真正感興趣的領域可以鼓勵持續寫作

如何在父分類的存檔頁面上顯示子分類 如何在父分類的存檔頁面上顯示子分類 Apr 19, 2025 pm 11:54 PM

您想了解如何在父分類存檔頁面上顯示子分類嗎?在自定義分類存檔頁面時,您可能需要執行此操作,以使其對訪問者更有用。在本文中,我們將向您展示如何在父分類存檔頁面上輕鬆顯示子分類。為什麼在父分類存檔頁面上顯示子分類?通過在父分類存檔頁面上顯示所有子分類,您可以使其不那麼通用,對訪問者更有用。例如,如果您運行一個關於書籍的WordPress博客,並且有一個名為“主題”的分類法,那麼您可以添加“小說”、“非小說”等子分類法,以便您的讀者可以

如何在 WordPress 中按帖子過期日期對帖子進行排序 如何在 WordPress 中按帖子過期日期對帖子進行排序 Apr 19, 2025 pm 11:48 PM

過去,我們分享過如何使用PostExpirator插件使WordPress中的帖子過期。好吧,在創建活動列表網站時,我們發現這個插件非常有用。我們可以輕鬆刪除過期的活動列表。其次,多虧了這個插件,按帖子過期日期對帖子進行排序也非常容易。在本文中,我們將向您展示如何在WordPress中按帖子過期日期對帖子進行排序。更新了代碼以反映插件中更改自定義字段名稱的更改。感謝Tajim在評論中讓我們知道。在我們的特定項目中,我們將事件作為自定義帖子類型。現在

wordpress主機怎麼建站 wordpress主機怎麼建站 Apr 20, 2025 am 11:12 AM

要使用 WordPress 主機建站,需要:選擇一個可靠的主機提供商。購買一個域名。設置 WordPress 主機帳戶。選擇一個主題。添加頁面和文章。安裝插件。自定義您的網站。發布您的網站。

如何使用 IFTTT 自動化 WordPress 和社交媒體(及更多) 如何使用 IFTTT 自動化 WordPress 和社交媒體(及更多) Apr 18, 2025 am 11:27 AM

您是否正在尋找自動化 WordPress 網站和社交媒體帳戶的方法? 通過自動化,您將能夠在 Facebook、Twitter、LinkedIn、Instagram 等平台上自動分享您的 WordPress 博客文章或更新。 在本文中,我們將向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 輕鬆實現 WordPress 和社交媒體的自動化。 為什麼要自動化 WordPress 和社交媒體? 自動化您的WordPre

如何在 WordPress 中顯示查詢數量和頁面加載時間 如何在 WordPress 中顯示查詢數量和頁面加載時間 Apr 19, 2025 pm 11:51 PM

我們的一位用戶詢問其他網站如何在頁腳中顯示查詢數量和頁面加載時間。您經常會在網站的頁腳中看到這一點,它可能會顯示類似以下內容:“1.248秒內64個查詢”。在本文中,我們將向您展示如何在WordPress中顯示查詢數量和頁面加載時間。只需將以下代碼粘貼到主題文件中您喜歡的任何位置(例如footer.php)。 queriesin

See all articles