Ember.js 入门指南——属性传递

1,传递参数到组件上

每个组件都是相对独立的,因此任何组件所需的数据都需要通过组件的属性把数据传递到组件中。

比如上篇《Ember.js 入门指南——组件定义》的第三点“{{component item.pn post=item}}”就是通过属性post把数据传递到组件foo-component或者bar-component上。如果在index.hbs中是如下方式调用组件那么渲染之后的页面是空的。

{{component item.pn}}

请读者自己修改index.hbs的代码后演示效果。

传递到组件的参数也是动态更新的,当传递到组件上的参数变化时组件渲染的HTML也会随之发生改变。

2,位置参数

传递的属性参数不一定要指定参数的名字。你可以不指定属性参数的名称,然后根据参数的位置获取对应的值,但是要在组件对应的组件类中指定位置参数的名称。比如下面的代码:

准备工作:

ember g route passing-properties-to-component

ember g component passing-properties-to-component

调用组件的模板,传入两个位置参数,分别是item.title、item.body。

<!-- app/templates/passing-properties-to-component.hbs  -->
 
{{#each model as |item|}}
       <!-- 传递到组件blog-post第一个参数为数据的title值,第二个为body值 -->
       {{passing-properties-to-component item.title item.body}}
{{/each}}

准备需要显示的数据。

//  app/routes/padding-properties-to-component.js
 
import Ember from ‘ember‘;
 
export default Ember.Route.extend({
 
       model: function() {
               return [
                 { id: 1, title: ‘Bower: dependencies and resolutions new‘, body: "In the bower.json file, I see 2 keys dependencies and resolutionsWhy is that so? " },
                 { id: 2, title: ‘Highly Nested JSON Payload - hasMany error‘, body: "Welcome to the Ember.js discussion forum. We‘re running on the open source, Ember.js-powered Discourse forum software. " },
                 { id: 3, title: ‘Passing a jwt to my REST adapter new ‘, body: "This sets up a binding between the category query param in the URL, and the category property on controller:articles. " }
           ];
         
       }
});

在组件类中指定位置参数的名称。

//  app/components/padding-properties-to-component.js
 
import Ember from ‘ember‘;
 
export default Ember.Component.extend({
       // 指定位置参数的名称
       positionalParams: [‘title‘, ‘body‘]
});

注意:属性positionalParams指定的参数不能在运行期改变。

组件直接使用组件类中指定的位置参数名称获取数据。

<!--  app/templates/components/passing-properties-to-component.hbs  -->
 
<article>
       <h1>{{title}}</h1>
       <p>{{body}}</p>
</article>

注意:获取数据的名称必须要与组件类指定的名称一致,否则无法正确获取数据。

显示结果如下:

Ember还允许你指定任意多个参数,但是组件类获取参数的方式就需要做点小修改。比如下面的例子:

调用组件的模板

<!-- app/templates/passing-properties-to-component.hbs  -->
 
{{#each model as |item|}}
       <!-- 传递到组件blog-post第一个参数为数据的title值,第二个为body值 -->
       {{passing-properties-to-component item.title item.body ‘third value‘ ‘fourth value‘}}
{{/each}}

指定参数名称的组件类,获取参数的方式可以参考计算属性这章。

//  app/components/padding-properties-to-component.js
 
import Ember from ‘ember‘;
 
export default Ember.Component.extend({
       // 指定位置参数为参数数组
       positionalParams: ‘params‘,
       title: Ember.computed(‘params.[]‘, function() {
              return this.get(‘params‘)[0];  //获取第一个参数
       }),
       body: Ember.computed(‘params.[]‘, function() {
              return this.get(‘params‘)[1];  //获取第二个参数
       }),
       third: Ember.computed(‘params.[]‘, function() {
              return this.get(‘params‘)[2];  //获取第三个参数
       }),
       fourth: Ember.computed(‘params.[]‘, function() {
              return this.get(‘params‘)[3];  //获取第四个参数
       })
});

下面看组件是怎么获取传递过来的参数的。

<!--  app/templates/components/passing-properties-to-component.hbs  -->
 
<article>
       <h1>{{title}}</h1>
       <p>{{body}}</p>
       <p>third: {{third}}</p>
       <p>fourth: {{fourth}}</p>
</article>

显示结果如下:

到此组件参数传递的内容全部介绍完毕。总的来说没啥难度。Ember中参数的传递与获取方式基本是相似的,比如link-to助手action助手

时间: 2024-12-26 12:48:32

Ember.js 入门指南——属性传递的相关文章

Ember.js 入门指南——包裹内容

准备工作: ember g route wrapping-content-in-component-route        ember g component wrapping-content-in-component 有些情况下,你需要定义一个包裹其他模板提供的数据的组件.比如下面的例子: <!--  app/templates/components/wrapping-content-in-component.hbs  -->   <h1>{{title}}</h1>

Ember.js 入门指南——总目录

Ember.js 是什么?我想对于想学习它的人应该知道它是个什么东西,如果你想了解那就赶紧去 Google 或者百度,本系列教程是通过学习官网教程然后摘抄个人觉得比较重要的部分,加上学习实例整合而成,如有疏漏欢迎提出修改意见,一起成长! Ember官网:http://emberjs.com/ 教程官网:http://guides.emberjs.com/v2.0.0/ 在此简单介绍下 Ember: Ember是一个雄心勃勃的Web应用程序,消除了样板,并提供了一个标准的应用程序架构的JavaSc

Ember.js 入门指南——model简介2

本文接上一篇<Ember.js 入门指南--model简介1>. 2,核心概念 声明:下面简介内摘抄至http://www.emberjs.cn/guides/models/#toc_. 1,store store是应用存放记录的中心仓库.你可以认为store是应用的所有数据的缓存.应用的控制器和路由都可以访问这个共享的store:当它们需要显示或者修改一个记录时,首先就需要访问store. DS.Store的实例会被自动创建,并且该实例被应用中所有的对象所共享. store可以看做是一个缓存

Ember.js 入门指南——控制器(controller)

ember new chapter5_controllers cd chapter5_controllers ember server 从本篇开始进入第五章控制器,controller在Ember2.0开始越来越精简了,职责也更加单一--处理逻辑. 下面是准备工作. 从新创建一个Ember项目,仍旧使用的是Ember CLI命令创建. 在浏览器执行项目,看到如下信息说明项目搭建成功. Welcome to Ember 1,控制器简介 控制器与组件非常相似,由此,在未来的新版本中很有可能组件将会完

Ember.js 入门指南——异步路由

本文将为你介绍路由的高级特性,这些高级特性可以用于处理项目复杂的异步逻辑. 关于单词promises,直译是承诺,但是个人觉得还是使用原文吧.读起来顺畅点. 1,promises(承诺) Ember的路由处理异步逻辑的方式是使用promises.简而言之,promises就是一个表示最终结果的对象.这个对象可能是fulfill(成功获取最终结果)也可能是reject(获取结果失败).为了获取这个最终值,或者是处理promises失败的情况都可以使用then方法,这个方法接受两个可选的回调方法,一

Ember.js 入门指南--目录

本系列文章全部从(http://ibeginner.sinaapp.com/)迁移过来,欢迎访问原网站. Ember.js 是什么?我想对于想学习它的人应该知道它是个什么东西,如果你想了解那就赶紧去 Google 或者百度,本系列教程是通过学习官网教程然后摘抄个人觉得比较重要的部分,加上学习实例整合而成,如有疏漏欢迎提出修改意见,一起成长! Ember官网:http://emberjs.com/ 教程官网:http://guides.emberjs.com/v2.0.0/ 在此简单介绍下 Emb

Ember.js 入门指南——路由定义

当你的应用启动的时候,路由器就会匹配当前的URL到你定义的路由上.然后按照定义的路由层次逐个加载数据.设置应用程序状态.渲染路由对应的模板. 1,基本路由 在app/router.js的map方法里定义的路由会映射到当前的URL.当map方法被调用的时候方法体内的route方法就会创建路由. 下面使用Ember CLI命令创建两个路由: ember generate route about ember generate route favorites 命令执行完之后你可在你的项目目录app/ro

Ember.js 入门指南——路由简介

从本文开始,将为大家介绍路由(route),如果你看过前面的<Ember.js 入门指南--{{link-to}} 助手>这篇文章应该初步了解了route.不过在这篇文章中只是简单介绍了路由是定义.路由层次,更深入的route将从本文开始逐一介绍. 当用户使用你的应用时,应用要在不同的状态之间切换.Ember提供了很多工具用于管理那些因应用规模改变而改变的状态. 讲route前先了解URL,在应用中大概会会有如下方式设置URL: 用户第一次加载应用的时: 用户手动改变URL,比如点击按钮之后跳

Ember.js 入门指南——模板渲染

路由的另一个重要职责是渲染同名字的模板. 比如下面的路由设置,posts路由渲染模板posts.hbs,路由new渲染模板posts/new.hbs. Router.map(function() {      this.route('posts', function() {      this.route('new');   }); }); 每一个模板都会渲染到父模板的{{outlet}}上.比如上面的路由设置模板posts.hbs会渲染到模板application.hbs的{{outlet}}