Betreten Sie Ember.js Teil 3: Ein tieferer Einblick
Ich hoffe, Sie beginnen zu erkennen, dass Ember.js ein leistungsstarkes, aber eigensinniges Framework ist. Wir haben nur an der Oberfläche gekratzt; es gibt noch viel zu lernen, bevor wir etwas wirklich Nützliches bauen können! Wir werden weiterhin das Ember-Starterkit verwenden. In diesem Teil der Serie besprechen wir, wie man in Ember auf Daten zugreift und diese verwaltet.
Nutzungsdaten
Im vorherigen Artikel haben wir einen statischen Satz von Farbnamen verwendet, die im Controller definiert sind:
App.IndexRoute = Ember.Route.extend({ setupController: function(controller) { controller.set('content', ['red', 'yellow', 'blue']); } });
Dadurch kann der Controller Daten der indiziertenVorlage zugänglich machen. Für Demos ist das nett, aber im wirklichen Leben wäre unsere Datenquelle kein fest codiertes Array.
Hier kommen Models ins Spiel. Ein Modell ist eine Objektdarstellung von Daten, die von einer Anwendung verwendet werden. Dabei kann es sich um ein einfaches Array oder Daten handeln, die dynamisch von einer RESTful-JSON-API abgerufen werden. Der Zugriff auf die Daten selbst erfolgt durch Verweis auf die Eigenschaften des Modells. Wenn wir uns die Ergebnisse also so ansehen:
{ "login": "rey", "id": 1, "age": 45, "gender": "male" }
Die im Modell angezeigten Eigenschaften sind:
- Anmelden
- Hände
- Alter
- Geschlecht
Greifen Sie auf die Daten selbst zu, indem Sie auf die Eigenschaften des Modells verweisen.
Wie Sie dem obigen Code entnehmen können, können Sie einen statischen Speicher definieren, aber meistens verwenden Sie Ember.Object, um das Modell zu definieren. Durch die Unterklassenbildung Ember.Object
können Sie Daten zurückgeben (z. B. über Ajax-Aufrufe) und Ihr Modell definieren. Obwohl Sie Daten explizit im Controller festlegen können, wird immer empfohlen, ein Modell zu erstellen, um die Trennung von Belangen und Best Practices für die Code-Organisation einzuhalten.
Alternativ können Sie ein Schwester-Framework namens Ember Data verwenden. Es handelt sich um eine ORM-ähnliche API und einen Persistenzspeicher, aber ich muss betonen, dass sie sich zum Zeitpunkt des Verfassens dieses Artikels im Wandel befindet. Es hat viel Potenzial, ist aber zum jetzigen Zeitpunkt sicherer zu nutzen Ember.Object
. Robin Ward, Mitbegründer von Discourse, hat einen tollen Blogbeitrag über die Verwendung von Ember ohne Ember-Daten geschrieben. Es beschreibt ihren Prozess und ich werde ihn für Sie aufschlüsseln.
Modell definieren
Im folgenden Beispiel verwende ich die inoffizielle Hacker News API, um JSON-basierte Daten aus einer Nachrichtenquelle zu extrahieren. Diese Daten werden in meinem Modell gespeichert und später vom Controller zum Füllen der Vorlage verwendet. Wenn wir uns die von der API zurückgegebenen Daten ansehen, können wir die Eigenschaften verstehen, die wir verwenden werden:
{ "nextId": null, "items": [{ "title": "Docker, the Linux container runtime: now open-source", "url": "http://docker.io", "id": 5445387, "commentCount": 39, "points": 146, "postedAgo": "2 hours ago", "postedBy": "shykes" }, { "title": "What\u0027s Actually Wrong with Yahoo\u0027s Purchase of Summly", "url": "http://hackingdistributed.com/2013/03/26/summly/", "id": 5445159, "commentCount": 99, "points": 133, "postedAgo": "2 hours ago", "postedBy": "hoonose" }, ], "version": "1.0", "cachedOnUTC": "\/Date(1364333188244)\/" }
Ich möchte items
属性,其中包含所有标题和故事信息。如果您使用过 SQL 数据库,请将 items
的每个元素视为一条记录,并将属性名称(即:title
、url
、id
usw.) als Feldnamen verwenden. Das Verständnis des Layouts ist wichtig, da diese Eigenschaftsnamen als Eigenschaften des Modellobjekts verwendet werden, das eine perfekte Schnittstelle zum Erstellen von Modellen darstellt.
Ember.Object
是所有 Ember 对象的主要基类,我们将对其进行子类化以使用其extend()
ist die Hauptbasisklasse für alle Ember-Objekte und wir werden sie in eine Unterklasse umwandeln, um unser Modell mit der Methodeextend()
zu erstellen.
Dazu fügen wir den folgenden Code zu App.IndexRoute
js/app.js hinzu, unmittelbar nach dem Code, der definiert:
App.Item = Ember.Object.extend();
App.Item
Wird als Modellklasse für Hacker News-Daten verwendet, verfügt jedoch über keine Methoden zum Abrufen oder Bearbeiten dieser Daten. Deshalb müssen wir diese definieren:
App.Item.reopenClass({ all: function() { return $.getJSON("http://api.ihackernews.com/page?format=jsonp&callback=?").then(function(response) { var items = []; response.items.forEach( function (item) { items.push( App.Item.create(item) ); }); return items; }); } });
Lassen Sie uns diesen Code aufschlüsseln. Zuerst fügen wir der reopenClass()
方法将新方法添加到 App.Item
类中,然后向其传递一个包含我们所需方法的对象。对于此示例,我们只需要一个名为 all()
的方法:它返回黑客新闻首页的所有标题。因为 jQuery 是 Ember 协议的一部分,所以我们可以使用它简单的 Ajax API。 API使用JSONP返回JSON数据;所以,我可以使用 $.getJSON()
-Klasse eine neue Methode hinzu, indem wir die reopenClass()
-Methode von Ember verwenden, und übergeben ihr dann ein Objekt, das die von uns benötigte Methode enthält. Für dieses Beispiel benötigen wir nur eine Methode namens all()
: Sie gibt alle Schlagzeilen der Hacker News-Homepage zurück. Da jQuery Teil des Ember-Protokolls ist, können wir dessen einfache Ajax-API verwenden. Die API verwendet JSONP, um JSON-Daten zurückzugeben. Daher kann ich mit $.getJSON()
eine Anfrage stellen an:
$.getJSON("http://api.ihackernews.com/page?format=jsonp&callback=?")
„callback=?“ teilt jQuery mit, dass es sich um eine JSONP-Anfrage handelt und die Daten (sobald sie abgerufen wurden) an einen anonymen Callback-Handler übergeben werden, der mit der Promise-Funktion von jQuery definiert wurde:
.then(function(response) {...});
Der ParameterIch kann JSON-Daten problemlos in Ember-Objekte einfügen.
response
enthält JSON-Daten, sodass Sie die Datensätze durchlaufen und das lokale Array items
mit einer Instanz von response
参数包含 JSON 数据,允许您循环记录并使用 App.Item
的实例更新本地 items
数组。最后,当 all()
aktualisieren können. Wenn schließlich all()
ausgeführt wird, geben wir das neu gefüllte Array zurück. Nachdem ich so viel gesagt habe, möchte ich noch einmal zusammenfassen:
- 通过使用
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 构建用户界面,并深入了解模板框架提供的各种指令。
Das obige ist der detaillierte Inhalt vonBetreten Sie Ember.js Teil 3: Ein tieferer Einblick. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So implementieren Sie MySQL zur Datenbindungsfunktion in SwiftUI. Bei der SwiftUI-Entwicklung kann die Datenbindung eine automatische Aktualisierung von Schnittstellen und Daten realisieren und so die Benutzererfahrung verbessern. Als beliebtes relationales Datenbankverwaltungssystem kann MySQL große Datenmengen speichern und verwalten. In diesem Artikel wird erläutert, wie Sie MySQL zum Implementieren der Datenbindungsfunktion in SwiftUI verwenden. Wir werden die Drittanbieter-Bibliothek MySQLConnector von Swift nutzen, die Verbindungen und Abfragen zu MySQL-Daten bereitstellt.

Vue ist ein Open-Source-JavaScript-Framework, das hauptsächlich zum Erstellen von Benutzeroberflächen verwendet wird. Der Kern von Vue ist die Datenbindung, die eine bequeme und effiziente Möglichkeit bietet, eine bidirektionale Bindung zwischen Daten und Ansichten zu erreichen. Der Datenbindungsmechanismus von Vue wird über einige spezielle Funktionen verwaltet. Diese Funktionen können uns dabei helfen, die Daten in der Vorlage automatisch an die entsprechenden Eigenschaften im JavaScript-Objekt zu binden, sodass die Daten in der Vorlage automatisch geändert werden, wenn die Eigenschaften im JavaScript-Objekt geändert werden

Vue ist ein beliebtes Front-End-JavaScript-Framework, das viele Anweisungen zur Vereinfachung des Datenbindungsprozesses bereitstellt. Eine der sehr nützlichen Anweisungen ist v-once. In diesem Artikel befassen wir uns mit der Verwendung der v-once-Direktive und der Implementierung von datengebundenem einmaligem Rendering in Vue. Was ist die V-Once-Anweisung? v-once ist eine Direktive in Vue. Ihre Funktion besteht darin, die Rendering-Ergebnisse von Elementen oder Komponenten zwischenzuspeichern, damit ihr Rendering-Prozess bei nachfolgenden Aktualisierungen übersprungen werden kann.

Vue-Fehler: Das V-Modell kann für die bidirektionale Datenbindung nicht korrekt verwendet werden. Einführung: Die bidirektionale Datenbindung ist eine sehr häufige und leistungsstarke Funktion bei der Entwicklung mit Vue. Manchmal kann es jedoch zu Problemen kommen. Wenn wir versuchen, das V-Modell für die bidirektionale Datenbindung zu verwenden, tritt ein Fehler auf. Dieser Artikel beschreibt die Ursache und Lösung dieses Problems und zeigt anhand eines Codebeispiels, wie das Problem gelöst werden kann. Problembeschreibung: Wenn wir versuchen, das V-Modell in Vue zu verwenden

Mit der kontinuierlichen Weiterentwicklung der Front-End-Technologie wird auch Vue als beliebtes Front-End-Framework ständig aktualisiert und iteriert. Die neueste Version, Vue3, führt viele neue Funktionen ein, die die Verwendung komfortabler und flexibler machen. Unter diesen ist die V-Modell-Funktion eine der erwähnenswerten neuen Funktionen in Vue3. Es kann eine bidirektionale Datenbindung erreichen, das heißt, bei Verwendung der V-Modell-Funktion kann nicht nur die Kommunikation zwischen übergeordneten und untergeordneten Komponenten einfach realisiert werden, sondern auch die vom Benutzer eingegebenen Daten automatisch an die Daten in gebunden werden Komponente.

So verwenden Sie Vue zur Formularvalidierung und Datenbindung. Einführung: Mit der kontinuierlichen Weiterentwicklung der Front-End-Entwicklung ist die Formularvalidierung von Benutzereingaben zu einem wichtigen Bindeglied geworden. Als beliebtes Front-End-Framework bietet Vue.js eine Reihe von Funktionen, um den Prozess der Formularvalidierung und Datenbindung zu vereinfachen. In diesem Artikel wird die Verwendung von Vue zur Formularvalidierung und Datenbindung vorgestellt und entsprechende Codebeispiele gegeben. 1. Grundlegende Datenbindung: In Vue können wir die V-Model-Direktive verwenden, um eine bidirektionale Datenbindung zu erreichen. Platzieren Sie das Eingabeelement

Vue.js ist ein beliebtes Front-End-Entwicklungsframework. Es ist leicht zu erlernen, flexibel, skalierbar und effizient und wird daher häufig in Entwicklungsteams verwendet. In diesem Artikel werden die Vue-Entwicklungserfahrungen aus verschiedenen Aspekten zusammengefasst, um die Effizienz der Zusammenarbeit des Entwicklungsteams zu verbessern. 1. Komponentenbasiertes Entwicklungsdenken Die Kernidee von Vue.js ist die komponentenbasierte Entwicklung, die komplexe Anwendungen in mehrere unabhängige Komponenten aufteilt, um die Wiederverwendbarkeit und Wartbarkeit zu erhöhen. Während des Entwicklungsprozesses sollten die Teammitglieder die Komponentisierungsideen vollständig verstehen und anwenden, Komponenten rational entwerfen und aufteilen sowie Komponenten reduzieren

Hinweise zur Vue-Entwicklung: Vermeiden Sie häufige Fehler und Fallstricke Einführung: Vue.js ist ein beliebtes JavaScript-Framework, das häufig zum Erstellen moderner interaktiver Front-End-Anwendungen verwendet wird. Obwohl Vue.js eine einfache, flexible und effiziente Entwicklungsmethode bietet, können während des Entwicklungsprozesses dennoch einige häufige Fehler und Fallstricke auftreten. In diesem Artikel werden einige allgemeine Überlegungen zur Vue-Entwicklung vorgestellt, um Entwicklern dabei zu helfen, diese Fehler und Fallen zu vermeiden und die Entwicklungseffizienz und Codequalität zu verbessern. Hinweis 1: Angemessene Verwendung von v-if und
