作为属性的聚合物回调

Polymer callback as an attribute

不久前我注意到 iron-ajax 使用属性 on-response="callbackFn" 在收到响应后执行。

我的问题只是这是如何工作的?

我有类似的情况,我想创建一个能够将回调作为属性的组件,但我不知道该怎么做。

我注意到两件事

  1. 触发后,该函数会正确绑定到它来自的 Polymer 元素。
  2. "callbackFn" 是函数名。不是聚合物结合。

所以我假设 iron-ajax 一定在后台做了一些诡计来绑定由函数名引用的给定函数。当我查看源代码时,虽然我没有看到对 'on-response' 属性的任何处理。 none,zilch,nada。什么给了?

我可以看到有一个 _boundedHandleResponse,但是 属性 似乎在任何时候都没有绑定到 on-response 函数。

source

_boundedHandleResponse 是一个函数,其值取决于 _handleResponse 函数。

_boundHandleResponse: {
  type: Function,
  value: function () {
    return this._handleResponse.bind(this);
  }
}

因此,如果您检查 _handleResponse 函数,则会有一个 'response' 事件使用代码调度:

this.fire('response', request, {
  bubbles: this.bubbles,
  composed: true
});

在聚合物元素中,我们使用 on-event 注释添加事件侦听器。例如点击,点击。因此,每次调度 response 时,它将调用定义为 on on-response="callbackFn" 的函数,该函数将调用 "callbackFn" 函数。