Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >index.hbs何时加载到一个Ember应用程序中?组件和模板之间有什么区别?

index.hbs何时加载到一个Ember应用程序中?组件和模板之间有什么区别?
EN

Stack Overflow用户
提问于 2015-11-02 07:38:22
回答 1查看 1K关注 0票数 1

我遵循这个Ember教程,这很快变得更加复杂。这就是我所关注的教程

我不知道发生了什么事。什么时候加载index.hbs ?为什么?下面是以router.js开头的代码:

代码语言:javascript
代码运行次数:0
复制
import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.route('todos', { path: '/'}, function() {
    this.route('complete');
    this.route('incomplete');
  });
});

export default Router;

所以看起来我们的主页url会加载todos.js路径,对吗?这是我的密码:

代码语言:javascript
代码运行次数:0
复制
import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    let todos = [
      {
        title: 'Learn Ember',
        complete: false,
      },
      {
        title: 'Solve World Hunger',
        complete: false,
      }
    ];
    return todos;
  }
});

所以这条todos.js路线是我的模型对吗?

默认情况下,我假设成员也会加载todos.hbs模板?是那么回事吗?还是加载应用程序/模板/todos/index.hb?它装哪一个?

这是我的应用程序/模板/todos.hbs代码:

代码语言:javascript
代码运行次数:0
复制
<input type="text" id="new-todo" placeholder="What needs to be done?" />
{{#todo-list todos=model}}
    {{outlet}}
{{/todo-list}}

这是我的应用程序/模板/todos/index.hbs代码:

代码语言:javascript
代码运行次数:0
复制
<ul id="todo-list">
    {{#each model as |todo|}}
         <!-- this loads the component todo-item and passes in a todo as todo -->
        {{todo-item todo=todo}}
    {{/each}}
</ul>

本教程并没有真正解释这里发生了什么。如果加载了index.hbs,那么它会加载todo项组件模板吗?如果是这样,这是我的应用程序/模板/组件/todo-item.hbs:

代码语言:javascript
代码运行次数:0
复制
<input type="checkbox" class="toggle" checked="{{if todo.complete 'checked'}}">  
<label class="{{if todo.complete 'completed'}}">{{todo.title}}</label><button class="destroy"></button>

如果app/templates/todos.hbs获得loaded...What,则在app/templates/todos.hbs中运行吗?我们是否传递模型(在模板中是可以访问的?)作为待办事项到待办事项列表组件?以下是应用程序/模板/组件/todo-list.hb

代码语言:javascript
代码运行次数:0
复制
<section id="main">
    {{yield}}

    <input type="checkbox" id="toggle-all">
</section>

<footer id="footer">
    <span id="todo-count">
        <strong>2</strong> todos left
    </span>
    <ul id="filters">
        <li>
            <a href="all" class="selected">All</a>
        </li>
        <li>
            <a href="active">Active</a>
        </li>
        <li>
            <a href="completed">Completed</a>
        </li>
    </ul>

    <button id="clear-completed">
        Clear completed (1)
    </button>
</footer>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-03 01:17:59

欢迎来到美丽的Emberjs世界!首先,我建议您访问Emberjs的官方页面。你能看到侧栏菜单吗?好吧,如果你想了解Emberjs的工作原理,就准备花点时间阅读它。首先,我强烈建议您至少阅读Router, Template, Component and Controller部分。

让我们看看您提供的一些片段:

代码语言:javascript
代码运行次数:0
复制
Router.map(function() {
  this.route('todos', { path: '/'}, function() {
    this.route('complete');
    this.route('incomplete');
  });
});

这就是你定义路线的地方。这里您拥有的是名为“todos”的主要路由,但它用作根页面(从/开始)。在此之后,还有两条路线:/complete/incomplete

代码语言:javascript
代码运行次数:0
复制
model() {
    let todos = [
      {
        title: 'Learn Ember',
        complete: false,
      },
      {
        title: 'Solve World Hunger',
        complete: false,
      }
    ];
    return todos;
  }

这里您是在一个路由中定义一个模型(我假设是todos的路由)。挺直的,不是吗?例如,如果您使用的是Ember Data。您将在这里向服务器请求模型,并且路由将等待直到收到响应。

有一个index模板和一个todos模板的原因很简单:todos.hbs将包含将呈现每个页面的{{outlet}}。把它想象成一个包装。无论在/之后发生什么,都会被这个todos.hbs包装,甚至是index.hbs。您有更多的信息这里,在指南中(为什么我建议您首先阅读它)。

让我们转到另一个片段:

代码语言:javascript
代码运行次数:0
复制
{{#todo-list todos=model}}
    {{outlet}}
{{/todo-list}}

在这里,您使用component包装在{{outlet}}中呈现的任何内容。您还没有在这里粘贴它,但是它应该在其模板中至少包含一个{{yield}},以指定{{outlet}}将呈现在何处。关于{{yield}}的信息可以找到这里

让我们转到下一部分:

代码语言:javascript
代码运行次数:0
复制
ul id="todo-list">
    {{#each model as |todo|}}
         <!-- this loads the component todo-item and passes in a todo as todo -->
        {{todo-item todo=todo}}
    {{/each}}
</ul>

这个{{#each}}把手以块的方式表示(这就是为什么它在开始使用#,在末尾使用/ ),它是一个循环,允许您处理模型的每一项,定义为todo。您在这里要做的是为组件todo-item提供模型的一个项。如果您的模型有3个todos,那么todo-item将被呈现3次,每个呈现一次。

再次,我建议您按照本教程打开emberjs guides,当您有疑问时,检查指南,直到您理解概念,然后,进入下一个步骤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33481337

复制
相关文章
HTML中的超链接
本文主要介绍了超链接的概念以及其在网页中的应用,包括http链接、本地链接、ftp链接和邮箱链接等,并重点讲解了锚点的定义和用法。
IT可乐
2018/01/04
4.2K0
html中超链接使用_HTML超链接代码
html超链接的写法是e69da5e6ba903231313335323631343130323136353331333431353431使用a标签,如:百度一下,你就知道。
全栈程序员站长
2022/09/18
1.2K0
paperswithcode发布第22期代码和论文时事通讯
采用基于检索的 NLP 的一系列新方法正在成为提高语言模型能力的有效替代方法。 沿着这些思路,Borgeaud 等人. (2021) 最近提出了 RETRO,这是一种利用 2 万亿token数据库的检索增强型 Transformer。 自回归模型以基于与先前标记的相似性从大型语料库中检索的文档块为条件。 与之前的增强方法(如 REALM)类似,所提出的模型在知识密集型任务(如问答)上表现得特别好。 有关 RETRO 架构的概述,请参见上图。
从大数据到人工智能
2022/01/19
5220
paperswithcode发布第22期代码和论文时事通讯
构建稳定的预览视图 —— SwiftUI 预览的工作原理
作为 SwiftUI 最引人注目的功能之一,预览功能吸引了不少开发者初次接触 SwiftUI。然而,随着项目规模的增长,越来越多的开发者发现预览功能并不如最初想象的那么易用。由于预览崩溃的次数和场景的增加,一些开发者已经视预览为 SwiftUI 的缺点之一,并对其产生了排斥感。
东坡肘子
2023/07/08
5900
构建稳定的预览视图 —— SwiftUI 预览的工作原理
html中超链接使用_html中的a标签,超链接代码的详细介绍「建议收藏」
欢迎关注支持,谢谢!今天为大家介绍的是超链接代码a标签的用法,大家有兴趣的话可以看看哟!
全栈程序员站长
2022/09/14
3.1K0
html超链接位置怎么改,如何修改HTML超链接样式?
在网页开发中,我们不免会用到超链接,将内容链接到原网页上。如果不对超链接进行设置,链接默认以固定样式显示,过于单一。那么我们要如何修改 HTML 中的超链接呢?这篇文章 W3Cschool 小编为大家介绍一下。
全栈程序员站长
2022/09/09
4K0
iOS开发中活动视图控制器UIActivityViewController的应用
    在iOS开发中,UIActivityViewController常用来弹出分享面板,其实除了用来社会化分享,UIActivityViewController还有一大应用是用来进行自定义行为。先看如下示例代码:
珲少
2018/08/15
3.8K1
iOS开发中活动视图控制器UIActivityViewController的应用
【已解决】AppStore 如何上传预览视频
【已解决】AppStore 如何上传预览视频 问题描述: 最新版本要上传 APP 的宣传视频 之前没做过 解决办法: 进入最新版本的版本管理信息界面-媒体管理 在媒体管理-选择文件,找到视频上传 视频
君赏
2018/09/07
2.4K0
html 中 a 链接的 download 属性的神奇使用
本文介绍了html中a链接的download属性的神奇使用,可以强制浏览器下载文件,并且支持重命名文件。对于需要下载服务端文件,而不需要浏览器打开的情况,这个属性非常有用。
FungLeo
2018/01/08
1.8K0
html语言代码超链接,html 超链接 word html超链接代码
“打开/保存”是因浏览者的浏览器而异的,假如浏览者的电脑没有装word软件,那么,无论什么情况,都是打不开的,你只能选择保存(选择打开的话,电脑会让你选择使用什么软件来打开);如果浏览者的电脑装了word软件,那么如果电脑的安全级别高一些,一样会提示“打开/保存”,为的是防止直接打开病毒文件。
全栈程序员站长
2022/09/14
21.2K0
如何在Xcode下预览含有Core Data元素的SwiftUI视图
从SwiftUI诞生之日起,预览(Canvas Preview )一直是个让开发者又爱又恨的功能。当预览正常工作时,它可以极大地提高开发效率;而预览又随时可能因为各种莫名其妙的原因崩溃,不仅影响开发进程,同时又让开发者感到沮丧(很难排查出导致预览崩溃的故障)。
东坡肘子
2022/07/28
5.2K0
如何在Xcode下预览含有Core Data元素的SwiftUI视图
as3.0中如何阻止事件冒泡?
as3.0中的事件冒泡机制有时候会很烦人,比如一个Sprite(方便下文描述就命名为Container吧)把另一外Sprite(称为Child吧)做为子元素套进来以后,如果两个Sprite都注册了Mouse_Down事件,要想在Child上点击鼠标时系统只响应Child的Mouse_Down事件,默认是不行的,因为事件冒泡会让Container也响应Mouse_Down事件,示例代码: package { import flash.display.*; import flash.events.Mouse
菩提树下的杨过
2018/01/23
1.6K0
html中给flash加链接代码
html中给flash加链接代码:<embed width="600" height="380" wmode="opaque" pluginspage="http://www.macromedia.c
用户1730674
2018/05/02
2.4K0
2019.5.27拼团活动链接
腾讯云2019年新的拼团活动来啦1H1G2M50G云盘15块一个月,买两个月送一个月,最多送半年,现在是2019年6.25上午10.09。下面的链接48小时有效。
大脑斧
2019/06/25
6720
2019.5.27拼团活动链接
html链接标签
<a>标签,也叫anchor(锚点)元素,既可以用来链接到外部地址实现页面跳转功能,也可以链接到当前页面的某部分实现内部导航功能。
Devops海洋的渔夫
2019/05/31
6.8K0
如何实现微信上制作活动链接「建议收藏」
随着互联网的快速发展,无论是房产、装修检查、家居、家店还是商城、餐饮等行业,商家们都会用到活动预约报名,线上活动链接的制作不仅成本低,而且受众也广,可以达到快速宣传的效果。相信很多小伙伴们在微信朋友圈看到的微信活动报名链接很好奇,这种活动链接是如何实现的,希望自己也可以在微信上制作这种活动链接。   工预善其事必先利其器,在这里,咱不能不提到一个非常好用的微信活动制作神器—获客宝。这款软件的神奇之处在于,他不仅可以帮你在微信上制作活动页面,而且还可以帮你侦查到谁偷偷浏览了你的页面(悄悄来,又悄悄走,不评价,不点赞的访客)。   首先,在微信平台上搜索独为信达,关注该观众号,关注了之后,左下角就会出现“获客宝”然后获客宝登录,授权下,您就可以进去了。
全栈程序员站长
2022/10/02
1.8K0
如何实现微信上制作活动链接「建议收藏」
公众号临时预览链接转永久链接怎么操作
  微信公众平台在六月份进行了一次更新升级,预览链接无法永久存在,只能作为临时预览使用,而且预览的链接将会在短期内失效+预览人数超过500人自动失效。那么利用素材库内文章传播,就受到了限制。那么如何解决这个问题呢?   方法一:最复杂   放入菜单栏。 选择素材库文章,然后点菜单栏,获得图文,点开,这时你会发现临时链接的提示没有了!然后右上角复制链接。就OK了。   方法二:略复杂   关键词自动回复 1、建立关键词规则,然后选择图文素材回复。 2、公众号内回复关键词,获取图文。 3、点开,右上角【
ytkah
2018/03/06
4.8K0
公众号临时预览链接转永久链接怎么操作
html 中 超链接的写法,网页超链接样式的CSS写法「建议收藏」
上一篇文章讲了母栏目后面两行子栏目的DIV布局,这篇文章讲导航做完之后我想在鼠标移到每个不同区域的超链接在颜色上给予变化。
全栈程序员站长
2022/09/09
2.6K0
html 中 超链接的写法,网页超链接样式的CSS写法「建议收藏」
点击加载更多

相似问题

将latin1转换为UTF8

50

如何将mysql latin1转换为utf8

30

latin1 + Mysql :如何将utf8转换为SOLR

116

如何将rds mysql latin1转换为utf8

13

Python将latin1转换为UTF8

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文