PolymerJS 中的 bind() 和 bindProperty() 有什么区别?
What's the difference between bind() and bindProperty() in PolymerJS?
似乎 bind()
是 Web 组件规范的一部分,Polymer 出于各种原因对其进行了扩展 with Node.bind()
。
这是docs on bindProperty()
。这只是 bind()
的内部 implementation/polyfill 吗?因此,开发人员是否应该使用 bind()
而不是 bindProperty()
?
答案在 bind
- line 56(下面的完整代码段)的源代码中。 bind
函数调用内部 bindProperty
函数。 bind
在 bindProperty
之上所做的一切都是确保给定的 属性 存在。
bind: function(name, observable, oneTime) {
var property = this.propertyForAttribute(name);
if (!property) {
// TODO(sjmiles): this mixin method must use the special form
// of `super` installed by `mixinMethod` in declaration/prototype.js
return this.mixinSuper(arguments);
} else {
// use n-way Polymer binding
var observer = this.bindProperty(property, observable, oneTime);
// NOTE: reflecting binding information is typically required only for
// tooling. It has a performance cost so it's opt-in in Node.bind.
if (Platform.enableBindingsReflection && observer) {
observer.path = observable.path_;
this._recordBinding(property, observer);
}
if (this.reflect[property]) {
this.reflectPropertyToAttribute(property);
}
return observer;
}
因此,您可以使用 bindProperty
,但我不会推荐它,除非您可以确保要绑定的 属性 存在。
似乎 bind()
是 Web 组件规范的一部分,Polymer 出于各种原因对其进行了扩展 with Node.bind()
。
这是docs on bindProperty()
。这只是 bind()
的内部 implementation/polyfill 吗?因此,开发人员是否应该使用 bind()
而不是 bindProperty()
?
答案在 bind
- line 56(下面的完整代码段)的源代码中。 bind
函数调用内部 bindProperty
函数。 bind
在 bindProperty
之上所做的一切都是确保给定的 属性 存在。
bind: function(name, observable, oneTime) {
var property = this.propertyForAttribute(name);
if (!property) {
// TODO(sjmiles): this mixin method must use the special form
// of `super` installed by `mixinMethod` in declaration/prototype.js
return this.mixinSuper(arguments);
} else {
// use n-way Polymer binding
var observer = this.bindProperty(property, observable, oneTime);
// NOTE: reflecting binding information is typically required only for
// tooling. It has a performance cost so it's opt-in in Node.bind.
if (Platform.enableBindingsReflection && observer) {
observer.path = observable.path_;
this._recordBinding(property, observer);
}
if (this.reflect[property]) {
this.reflectPropertyToAttribute(property);
}
return observer;
}
因此,您可以使用 bindProperty
,但我不会推荐它,除非您可以确保要绑定的 属性 存在。