【发布时间】:2020-04-07 09:14:40
【问题描述】:
在使用 Ember 的新 Glimmer 组件之前,我使用了 didInsertElement 生命周期挂钩来计算图像元素的自然宽度。我传递了一个目标宽度,因此我可以在浏览器中调整图像的大小。
didInsertElement() {
this._super(...arguments);
if (this.targetWidth && this.targetWidth < this.element.naturalWidth) {
this.targetHeight = Math.round(this.targetWidth / this.element.naturalWidth * this.element.naturalHeight);
set(this, 'width', this.targetWidth);
set(this, 'height', this.targetHeight);
}
else {
set(this, 'width', this.naturalWidth);
set(this, 'height', this.naturalHeight);
}
使用 Glimmer 组件,并使用 @ember/render-modifiers,父级传入的 src:
<img {{did-insert this.calculateDimensions}} src={{@src}} width={{this.width}} height={{this.height}}>
在组件JS文件中
@action
calculateDimensions(element) {
if (this.args.targetWidth && this.args.targetWidth < element.naturalWidth) {
this.height = Math.round(this.args.targetWidth / element.naturalWidth * element.naturalHeight);
this.width = this.args.targetWidth;
}
else {
this.width = element.naturalWidth;
this.height = element.naturalHeight;
}
element.setAttribute("width", this.width);
element.setAttribute("height", this.height);
}
如果您重新加载索引/主页,这一切都可以正常工作。但是,当您第一次到达该站点时,不会渲染图像,因为 element.naturalWidth 的值为零。该元素存在,如果它被记录到控制台,我可以看到自然宽度和高度的值。 ember-render-modifier {{did-insert}} 不是 didInsertElement 的完全替代品吗?
非常感谢任何帮助。
【问题讨论】:
标签: ember.js