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()
은 모든 Ember 객체의 기본 기본 클래스이며extend()
메서드를 사용하여 모델을 생성하기 위해 이를 서브클래스화할 것입니다.
이를 위해 App.IndexRoute
js/app.js에 를 정의하는 코드 바로 뒤에 다음 코드를 추가합니다.
App.Item
Hacker News 데이터의 모델 클래스로 사용되지만 해당 데이터를 검색하거나 조작하는 메서드가 없습니다. 따라서 다음을 정의해야 합니다.
이 코드를 분석해 보겠습니다. 먼저 Ember의 reopenClass()
메서드를 사용하여 reopenClass()
方法将新方法添加到 App.Item
类中,然后向其传递一个包含我们所需方法的对象。对于此示例,我们只需要一个名为 all()
的方法:它返回黑客新闻首页的所有标题。因为 jQuery 是 Ember 协议的一部分,所以我们可以使用它简单的 Ajax API。 API使用JSONP返回JSON数据;所以,我可以使用 $.getJSON()
클래스에 새 메서드를 추가한 다음 필요한 메서드가 포함된 객체에 전달합니다. 이 예에서는 all()
이라는 메서드만 필요합니다. 이 메서드는 Hacker News 홈페이지의 모든 헤드라인을 반환합니다. jQuery는 Ember 프로토콜의 일부이므로 간단한 Ajax API를 사용할 수 있습니다. API는 JSONP를 사용하여 JSON 데이터를 반환하므로 $.getJSON()
을 사용하여 다음을 요청할 수 있습니다.
"callback=?"은 이것이 JSONP 요청이고 데이터(검색된 후)가 jQuery의 Promise 기능을 사용하여 정의된 익명 콜백 핸들러로 전달될 것이라고 jQuery에 알려줍니다. 으아악
JSON 데이터를 Ember 개체에 쉽게 삽입할 수 있습니다.
response
매개변수에는 JSON 데이터가 포함되어 있어 레코드를 반복하고 인스턴스로 로컬 items
배열을 업데이트할 수 있습니다. 마지막으로 all()
이 실행되면 새로 채워진 배열을 반환합니다. 너무 많이 말했으니 요약해 보겠습니다. response
参数包含 JSON 数据,允许您循环记录并使用 App.Item
的实例更新本地 items
数组。最后,当 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MySQL을 사용하여 SwiftUI에서 데이터 바인딩 기능을 구현하는 방법 SwiftUI 개발에서 데이터 바인딩은 인터페이스와 데이터의 자동 업데이트를 실현하여 사용자 경험을 향상시킬 수 있습니다. 널리 사용되는 관계형 데이터베이스 관리 시스템인 MySQL은 대량의 데이터를 저장하고 관리할 수 있습니다. 이 기사에서는 MySQL을 사용하여 SwiftUI에서 데이터 바인딩 기능을 구현하는 방법을 소개합니다. 우리는 MySQL 데이터에 대한 연결과 쿼리를 제공하는 Swift의 타사 라이브러리 MySQLConnector를 사용할 것입니다.

Vue는 주로 사용자 인터페이스 구축에 사용되는 오픈 소스 JavaScript 프레임워크입니다. Vue의 핵심은 데이터 바인딩으로, 데이터와 뷰 간의 양방향 바인딩을 달성하는 편리하고 효율적인 방법을 제공합니다. Vue의 데이터 바인딩 메커니즘은 일부 특수 기능을 통해 처리됩니다. 이러한 함수는 템플릿의 데이터를 JavaScript 개체의 해당 속성에 자동으로 바인딩하는 데 도움이 됩니다. 따라서 JavaScript 개체의 속성이 수정되면 템플릿의 데이터도 자동으로 변경됩니다.

Vue는 데이터 바인딩 프로세스를 단순화하기 위한 많은 지침을 제공하는 인기 있는 프런트 엔드 JavaScript 프레임워크입니다. 매우 유용한 지침 중 하나는 v-once입니다. 이 기사에서는 v-once 지시문의 사용과 Vue에서 데이터 바인딩된 일회성 렌더링을 구현하는 방법을 살펴보겠습니다. v-once 명령은 무엇입니까? v-once는 Vue의 지시어입니다. 해당 기능은 요소 또는 구성 요소의 렌더링 결과를 캐시하여 후속 업데이트에서 렌더링 프로세스를 건너뛸 수 있도록 하는 것입니다.

Vue 오류: 양방향 데이터 바인딩에 v-model을 올바르게 사용할 수 없습니다. 해결 방법은 무엇입니까? 소개: 양방향 데이터 바인딩은 Vue로 개발할 때 매우 일반적이고 강력한 기능입니다. 그러나 때로는 문제가 발생할 수 있습니다. 즉, 양방향 데이터 바인딩에 v-model을 사용하려고 하면 오류가 발생합니다. 이 문서에서는 이 문제의 원인과 해결 방법을 설명하고 문제 해결 방법을 보여 주는 코드 예제를 제공합니다. 문제 설명: Vue에서 v-model을 사용하려고 할 때

프론트엔드 기술이 지속적으로 발전함에 따라 인기 있는 프론트엔드 프레임워크인 Vue도 지속적으로 업데이트되고 반복됩니다. 최신 버전인 Vue3에는 많은 새로운 기능이 도입되어 더욱 편리하고 유연하게 사용할 수 있습니다. 그 중 v-model 기능은 Vue3에서 언급할 만한 새로운 기능 중 하나입니다. 양방향 데이터 바인딩을 달성할 수 있습니다. 즉, v-model 기능을 사용할 때 상위 구성 요소와 하위 구성 요소 간의 통신을 쉽게 실현할 수 있을 뿐만 아니라 사용자가 입력한 데이터를 자동으로 구성 요소의 데이터에 바인딩할 수 있습니다. 요소.

양식 유효성 검사 및 데이터 바인딩에 Vue를 사용하는 방법 소개: 프런트 엔드 개발이 지속적으로 발전하면서 사용자 입력에 대한 양식 유효성 검사가 중요한 링크가 되었습니다. 널리 사용되는 프런트엔드 프레임워크인 Vue.js는 양식 유효성 검사 및 데이터 바인딩 프로세스를 단순화하는 일련의 기능을 제공합니다. 이 기사에서는 양식 유효성 검사 및 데이터 바인딩에 Vue를 사용하는 방법을 소개하고 해당 코드 예제를 제공합니다. 1. 기본 데이터 바인딩: Vue에서는 v-model 지시문을 사용하여 양방향 데이터 바인딩을 달성할 수 있습니다. 입력 요소 배치

Vue.js는 인기 있는 프런트엔드 개발 프레임워크로, 배우기 쉽고 유연하며 확장 가능하고 효율적이므로 개발 팀에서 널리 사용됩니다. 이 기사에서는 개발 팀의 협업 효율성을 향상시키기 위해 여러 측면에서 Vue 개발 경험을 요약합니다. 1. 컴포넌트 기반 개발 사고 Vue.js의 핵심 아이디어는 컴포넌트 기반 개발로, 복잡한 애플리케이션을 여러 개의 독립적인 컴포넌트로 분할하여 재사용성과 유지 관리성을 높입니다. 개발 과정에서 팀원은 컴포넌트화 아이디어를 완전히 이해하고 적용해야 하며, 컴포넌트를 합리적으로 설계 및 분할하고, 컴포넌트를 줄여야 합니다.

Vue 개발 노트: 일반적인 실수와 함정 방지 소개: Vue.js는 현대적인 대화형 프런트엔드 애플리케이션을 구축하는 데 널리 사용되는 인기 있는 JavaScript 프레임워크입니다. Vue.js는 간단하고 유연하며 효율적인 개발 방법을 제공하지만 개발 과정에서 여전히 몇 가지 일반적인 오류와 함정에 직면할 수 있습니다. 이 기사에서는 개발자가 이러한 실수와 함정을 피하고 개발 효율성과 코드 품질을 향상시키는 데 도움이 되는 몇 가지 일반적인 Vue 개발 고려 사항을 소개합니다. 참고 1: v-if의 합리적인 사용 및
