一、The {{link-to}} Helper

1. 使用{{link-to}}创建一个指向route的链接:

app/router.js

Router.map(function() {
this.route("photos", function(){
this.route("edit", { path: "/:photo_id" });
});
});

app/templates/photos.hbs

<ul>
{{#each photos as |photo|}}
<li>{{#link-to 'photos.edit' photo}}{{photo.title}}{{/link-to}}</li>
{{/each}}
</ul>

如果photos templatemodel是一个三张照片的集合,HTML:

<ul>
<li><a href="/photos/1">Happy Kittens</a></li>
<li><a href="/photos/2">Puppy Running</a></li>
<li><a href="/photos/3">Mountain Landscape</a></li>
</ul>

2. {{link-to}}有一个或者两个参数:

  • 路由的名字。在例子中,就是index, photos或者photos.edit
  • 动态段dynamic segment的大多数模型,默认的,Ember将会使用相应对象的id属性的值替换每个段。在上面的例子中,第二个参数就是每个photo对象,id属性被用来填充对应字段,无论是1,2,3。如果没有model被传递给helper,你可以提供明确的值来代替。
  • app/templates/photo.hbs
  • {{#link-to 'photos.photo.edit' 1}}
    First Photo Ever
    {{/link-to}}
  • 当被渲染的链接匹配当前路由,并且同一个对象实例被传递到helper,然后这个link会添加class="active"属性。例如,如果URL是/photos/2,上面第一个例子会被渲染为:
  • <ul>
    <li><a href="/photos/1">Happy Kittens</a></li>
    <li><a href="/photos/2" class="active">Puppy Running</a></li>
    <li><a href="/photos/3">Mountain Landscape</a></li>
    </ul>  

二、Example for Multiple Segments

如果路由是嵌套的,你可以为每一个动态字段提供一个模型或者一个标识符。

app/router.js

Router.map(function() {
this.route("photos", function(){
this.route("photo", { path: "/:photo_id" }, function(){
this.route("comments");
this.route("comment", { path: "/comments/:comment_id" });
});
});
});

app/templates/photo/index.hbs

<div class="photo">
{{body}}
</div> <p>{{#link-to 'photos.photo.comment' primaryComment}}Main Comment{{/link-to}}</p>

如果你仅仅指定一个模型,它将代表最内层的动态段:comment_id:photo_id字段会使用当前的photo。

可选择的,你可以传递一个photoid和一个comment

app/templates/photo/index.hbs

<p>
{{#link-to 'photo.comment' 5 primaryComment}}
Main Comment for the Next Photo
{{/link-to}}
</p>
  • 在上面例子中,PhotoRoutemodel hook将会使用params.photo_id=5运行。CommentRoutemodel hook不会运行直到你为comment字段提供一个对象。commentid将会根据CommentRoute的 序列化钩子方法填充URL。

三、Using link-to as An Inline Helper

除了作为一个块表达式之外,通过指定链接文本作为helper的第一个参数,link-to helper也可以在inline form中被使用:

A link in {{#link-to 'index'}}Block Expression Form{{/link-to}},
and a link in {{link-to 'Inline Form' 'index'}}.

输出:

A link in <a href='/'>Block Expression Form</a>,
and a link in <a href='/'>Inline Form</a>.

四、Adding Additional Attributes on A Link

当生成一个链接时你可能希望设置为它额外的属性。你可以使用额外的参数这样做:

<p>
{{link-to 'Edit this photo' 'photo.edit' photo class="btn btn-primary"}}
</p>

许多通用的HTML属性你都可以使用例如class。当添加类名时,Ember还将应用标准的ember-view和可能的active类名。

五、Replacing History Entries

当在路由之间跳转时,link-to默认的形式是在浏览器的历史中增加条目。然而,在浏览器历史记录中你可以使用replace=true替换当前条目。

<p>
{{#link-to 'photo.comment' 5 primaryComment replace=true}}
Main Comment for the Next Photo
{{/link-to}}
</p>

3.7 Templates -- Links的更多相关文章

  1. [转]Format a ui-grid grid column as currency

    本文转自:https://stackoverflow.com/questions/27747184/format-a-ui-grid-grid-column-as-currency-rc-3-0 Yo ...

  2. Using FreeMarker templates (FTL)- Tutorial

    Lars Vogel, (c) 2012, 2016 vogella GmbHVersion 1.4,06.10.2016 Table of Contents 1. Introduction to F ...

  3. django模板层(templates)

    1.基础部分 通过使用模板,就可以在URL中直接调用HTML,它还是松耦合的,灵活性强,而且更容易维护 而且可以将变量通过一定的方式嵌入到HTML中,最终渲染到页面,总的来说基于模板完成了数据与用户之 ...

  4. Flask中的MTV架构之Templates

    Flask 中的MTV架构之Templates 关注公众号"轻松学编程"了解更多. 1.Templates(模板引擎) 1.1 说明 ​ 模板文件就是按照特定规则书写的一个负责展示 ...

  5. iOS微信里打开app,Universal Links

    这两天在弄分享,从第三方应用或者浏览器打开自己app的东西 传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Schem ...

  6. Dancing Links and Exact Cover

    1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...

  7. 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题

    精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1.4.5行) 如何利用给定的矩阵求出相应的行的集合 ...

  8. 解决Windows版Git出现templates not found的问题

    环境: Win10 x64 Git windows客户端(下载自 https://git-scm.com/) SourceTree 1.9.6.1(使用系统安装的Git,而非SourceTree内嵌的 ...

  9. links and softwares

    links 普通 http://www.ncpa-classic.com//special/2014gejujie/index.shtml ; 中国大剧院 http://tieba.baidu.com ...

随机推荐

  1. C# Serializable(转)

    C# Serializable System.SerializableAttribute 串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行 ...

  2. 改善C#程序的建议4:C#中标准Dispose模式的实现

    http://www.cnblogs.com/luminji/archive/2011/03/29/1997812.html 需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个 ...

  3. SpringMVC配置session过期拦截器,返回登录页面

    spring-mvc.xml配置 <mvc:interceptors> <!-- session失效拦截器 --> <mvc:interceptor> <!- ...

  4. Xcode 利用VVDocumenter 生成注释 通过设置 再生成注释文档

    在写代码的时候,如果按照一定的规范在头文件里写上注释的话, 就可以利用Xcode的文档自动输出功能生成一份完整的HTML项目文档. 生成的格式和Apple Developer网站上的API文档几乎是一 ...

  5. Swift-Swift中的全局变量和函数的创建

    解决办法: 写OC的时候常常会用到各种宏定义,但是Swift中貌似没有宏的这种定义,更多的是通过全局常量或者全局函数来实现这一效果.我们只需要建立一个文件(假设为Macro.swift),把想用的定义 ...

  6. redis基础----->redis的基本使用(一)

    这里我们就在虚拟机中安装redis,并且使用java和python实现简单的操作.深情是我承担不起的重担,情话只是偶尔兑现的谎言. redis的使用 下载地址:https://redis.io/.安装 ...

  7. getOwnPropertyNames() & keys()

    1.getOwnPropertyNames方法可以获得对象的所有属性名,并储存于一个数组当中. keys方法只能获取可遍历的属性名并储存于数组. 2.在完成notepad模块模拟的过程中使用了getO ...

  8. Excel 中如何快速统计一列中相同字符的个数(函数法)

    https://jingyan.baidu.com/article/6d704a132ea17328da51ca78.html 通过excel快速统计一列中相同字符的个数,如果很少,你可以一个一个数. ...

  9. FlipClock.js时钟,计数,3D翻转插件

    1.FlipClock.js能够自动定义计数,时钟的翻牌效果,调用简单,下面简单记录下用法 2.官网地址:http://www.flipclockjs.com/ 3.调用2个文件 <link h ...

  10. c# Socket通信基础

     一.IP地址操作类   1.IPAddress类 a.在该类中有一个 Parse()方法,可以把点分的十进制IP表示转化成IPAddress类,方法如下: IPAddress address = I ...