当前位置: 首页 > 软件库 > 程序开发 > >

ember-on-modifier

授权协议 MIT License
开发语言 JavaScript
所属分类 程序开发
软件类型 开源软件
地区 不详
投 递 者 夏侯昊明
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

ember-on-modifier

A polyfill for the {{on}} element modifier specified byRFC #471 "{{on}} modifier".

Installation

ember install ember-on-modifier

Compatibility

  • Completely inert when running ember-source 3.11 or higher
  • Tested against ember-source v2.12, v2.18, v3.4 in CI

Usage

<button {{on "click" this.onClick}}>
  Click me baby, one more time!
</button>
import Component from '@ember/component';
import { action } from '@ember-decorators/object';

export default class BritneySpearsComponent extends Component {
  @action
  onClick(event: MouseEvent) {
    console.log('I must confess, I still believe.');
  }
}

The @action decorator is used to bind the onClick method to thecomponent instance.

This is essentially equivalent to:

didInsertElement() {
  super.didInsertElement();

  const button = this.element.querySelector('button');
  button.addEventListener('click', this.onClick);
}

In addition to the above {{on}} will properly tear down the event listener,when the element is removed from the DOM. It will also re-register the eventlistener, if any of the passed parameters change.

Listening to Multiple Events

You can use the {{on}} modifier multiple times on the same element, even forthe same event.

<button
  {{on "click" this.onClick}}
  {{on "click" this.anotherOnClick}}
  {{on "mouseover" this.onMouseEnter}}
>
  Click me baby, one more time!
</button>

Event Options

All named parameters will be passed through toaddEventListener as the third parameter, the options hash.

<div {{on "scroll" this.onScroll passive=true}}>
  Lorem Ipsum ...
</div>

This is essentially equivalent to:

didInsertElement() {
  super.didInsertElement();

  const div = this.element.querySelector('div');
  div.addEventListener('scroll', this.onScroll, { passive: true });
}

once

To fire an event listener only once, you can pass the once option:

<button
  {{on "click" this.clickOnlyTheFirstTime once=true}}
  {{on "click" this.clickEveryTime}}
>
  Click me baby, one more time!
</button>

clickOnlyTheFirstTime will only be fired the first time the button is clicked.clickEveryTime is fired every time the button is clicked, including the firsttime.

capture

To listen for an event during the capture phase already, use the capture option:

<div {{on "click" this.triggeredFirst capture=true}}>
  <button {{on "click" this.triggeredLast}}>
    Click me baby, one more time!
  </button>
</div>

passive

If true, you promise to not call event.preventDefault(). This allows thebrowser to optimize the processing of this event and not block the UI thread.This prevent scroll jank.

If you still call event.preventDefault(), an assertion will be raised.

<div {{on "scroll" this.trackScrollPosition passive=true}}>
  Lorem ipsum...
</div>

Internet Explorer 11 Support

Internet Explorer 11 has a buggy and incomplete implementation ofaddEventListener: It does not accept anoptions parameter and sometimes even throwsa cryptic error when passing options.

This is why this addon ships a tiny ponyfill for addEventLisenerthat is used internally to emulate the once, capture and passive option.This means that all currently known options arepolyfilled, so that you can rely on them in your logic.

Currying / Partial Application

If you want to curry the function call / partially apply arguments, you can doso using the {{fn}} helper:

{{#each this.users as |user|}}
  <button {{on "click" (fn this.deleteUser user)}}>
    Delete {{user.name}}
  </button>
{{/each}}
import Component from '@ember/component';
import { action } from '@ember-decorators/object';

interface User {
  name: string;
}

export default class UserListComponent extends Component {
  users: User[] = [{ name: 'Tom Dale' }, { name: 'Yehuda Katz' }];

  @action
  deleteUser(user: User, event: MouseEvent) {
    event.preventDefault();
    this.users.removeObject(user);
  }
}

preventDefault / stopPropagation / stopImmediatePropagation

The old {{action}} modifier used to allow easilycalling event.preventDefault() like so:

<a href="/" {{action this.someAction preventDefault=true}}>Click me</a>

You also could easily call event.stopPropagation() to avoid bubbling like so:

<a href="/" {{action this.someAction bubbles=false}}>Click me</a>

You can still do this using ember-event-helpers:

<a href="/" {{on "click" (prevent-default this.someAction)}}>Click me</a>
<a href="/" {{on "click" (stop-propagation this.someAction)}}>Click me</a>

Related Projects

  • ember-on-helper: A complimentary {{on} templatehelper that accepts arbitrary event targets.

    {{on eventTarget eventName eventListener}}

    Also ships with two convenience helpers for adding event listeners todocument and window:

    {{on-document eventName eventListener}}
    {{on-window eventName eventListener}}
 相关资料
  • Ember检查器是一个浏览器插件,用于调试Ember应用程序。 灰烬检查员包括以下主题 - S.No. 灰烬检查员方式和描述 1 安装Inspector 您可以安装Ember检查器来调试您的应用程序。 2 Object Inspector Ember检查器允许与Ember对象进行交互。 3 The View Tree 视图树提供应用程序的当前状态。 4 检查路由,数据选项卡和库信息 您可以看到检查

  • on

    描述 (Description) 它将事件绑定到对象和回调函数。 每当触发事件时,它都会执行回调。 语法 (Syntax) object.on(event, callback function, [context]) 参数 (Parameters) event - 它绑定一个对象。 callback - 它是对代码的引用。 context - 它是一个可以传递给回调函数的对象。 例子 (Exam

  • cPanel的这个接口允许您创建和安装Ruby on Rails应用程序。 如果您开发了Ruby on Rails应用程序,则可以使用此界面将其部署到服务器。 要创建Ruby on Rails应用程序,请按照下列步骤操作 - Step 1 - 单击cPanel Home的Software Section下的Ruby on Rails。 Step 2 - 在Ruby on Rails接口中,您将找到

  • 英文原文: http://emberjs.com/guides/getting-ember/index/ Ember构建 Ember的发布管理团队针对Ember和Ember Data维护了不同的发布方法。 频道 最新的Ember和Ember Data的 Release,Beta 和 Canary 构建可以在这里找到。每一个频道都提供了一个开发版、最小化版和生产版。更多关于不同频道的信息可以查看博客

  • ember-autostash-modifier A modifier for stashing changes, binding those changes to a key, and restoring those changesbased on that key. View Documentation Here Useful for chat apps, where you'd want t

  • ember-style-modifier This addon provides a {{style}} element modifier to set element's style.This allows to set custom CSS of an element without requiring a Content Security Policy style-src-attr: "un