Ember.js 笔记

By | 2021年12月31日

路由

1 浏览器上的URL参数控制

1.1 方法一:在Controller上设置

import Controller from '@ember/controller';

export default Controller.extend({
  queryParams: ['deviceUuid']
});

1.2 方法二:在Route上设置

import Route from '@ember/routing/route';

export default Route.extend({
  queryParams: {
    deviceUuid: {
    //默认情况下,ember将使用pushstate更新地址栏中的URL,以响应控制器查询参数属性的更改;如果该用replacestate,这会阻止将其他项目添加到浏览器的历史记录中
    //replace: true,
    //触发 model 的刷新
    //refreshModel: true
    }
  }
});

2 Component 中使用 RouterService

import Component from '@ember/component';


export default Component.extend(ResizeAware, {
  routing: Ember.inject.service('-routing'),

  refreshCurrentRoute(){
    let currentRouteName = this.get("routing.currentRouteName");
    let currentRouteInstance = Ember.getOwner(this).lookup(`route:${currentRouteName}`);
    currentRouteInstance.refresh();  //刷新路由,但不会重新渲染页面
  }
});

3 不要在 application.hbs 默认路由模板中放置任何内容(教训)

ember.js 目前将 zeepolicy 的整个框架内容,包括顶部工具栏、菜单栏等都放到了 application.hbs 默认路由模板上,导致后续在这个项目上新添加的子项目都会拥有这个模板。

这导致目前我的一个需求无法实现:我想写一个纯净简单的页面,不包含任何顶部工具栏、菜单栏等,只需要放一个策略组件上去,然后在设备详情弹出的modal里嵌入一个iframe展示这个组件,iframe做了些样式调整及自动高度调整后,测试下来效果不错,因此打算采用这种方式。毕竟直接动态在modal中(非ember框架组件)添加ember组件的方式想都没敢想。

现调整路由走向:
  1. application->main(main模板定义目前项目整个框架内容,包括顶部工具栏、菜单栏等)
  2. application->segment(segment模板无内容,它的子模板是一个HTML页面,内容可以任意,放个已定义好的组件啥的都可以,如果main页面的某个地方需要(包括modal),可以直接放个iframe使用)
  3. application->其他子项目…

推荐方式:ember-modal-dialog 插件(路由模板、组件模板都可以用)

之前使用的是自定义的modal,还可以使用 ember-modal-dialog 插件。它的路由方式是:
To have a modal open for a specific route, just drop the {{modal-dialog}} into that route’s template. Don’t forget to have an {{outlet}} on the parent route.
原文:https://www.npmjs.com/package/ember-modal-dialog#live-demo-and-test-examples

模板

1 显示后台返回的 HTML 内容

当后台返回未编码的html内容后(返回格式为json),如果想使用 ember.js 的模板来直接显示,就不能用 {{myHtml}} ,必须要用 {{{myHtml}}}

第三方插件安装

ember 官网《Managing Dependencies》一章提到安装普通NPM插件,需要先安装ember install ember-auto-import此插件,但是我一直没有安装成功过此插件。所以一般还是在ember-cli-build.js中添加js。地址:https://github.com/ef4/ember-auto-import

发表评论

您的电子邮箱地址不会被公开。