有两种方法可以做到这一点。
这两个示例都假定ember-bootstrap并ember-autoresize已安装。
1. Ad-hoc方式:无需配置,但使用不太方便
使用此处描述的“自定义控件” 。
这是一个例子:
{{#bs-form formLayout="vertical" model=email as |form|}}
{{#form.element controlType="textarea" property="textEdit" as |el|}}
{{textarea autoresize=true id=el.id value=el.value class="form-control"}}
{{/form.element}}
{{/bs-form}}
演示:https ://ember-twiddle.com/4860f5d660dceadc804495d2720f69f6?openFiles=templates.application.hbs%2C
2. 健壮的方法:需要配置,但使用更方便
覆盖原来的 textarea 组件。
这是经典项目结构的路径。对于 Pod 或 Module Unification,路径会有所不同。
app/components/bs-form/element/control/textarea.js
在该文件中,执行autoresize textarea 组件所做的事情,但在 Ember-Bootstrap 的 textarea 组件之上:
import BootstrapTextareaComponent from 'ember-bootstrap/components/bs-form/element/control/textarea';
import AutoResizeMixin from 'ember-autoresize/mixins/autoresize';
import { computed, get } from '@ember/object';
import { isEmpty, isNone } from '@ember/utils';
export default BootstrapTextareaComponent.extend(AutoResizeMixin, {
autoresize: true,
shouldResizeHeight: true,
significantWhitespace: true,
autoResizeText: computed('value', 'placeholder', {
get() {
var placeholder = get(this, 'placeholder');
var value = get(this, 'value');
var fillChar = '@';
if (isEmpty(value)) {
return isEmpty(placeholder) ? fillChar : placeholder + fillChar;
}
if (isNone(value)) {
value = '';
}
return value + fillChar;
}
})
});
然后就可以正常调用Bootstrap textarea组件了:
{{#bs-form model=this formLayout="vertical" as |form|}}
{{form.element label="Inline" placeholder="Enter description..." property="appName" controlType="textarea"}}
{{/bs-form}}
演示:https ://ember-twiddle.com/693209c5fd4c2eeae765827f42dbd635?openFiles=templates.application.hbs%2C
上面的代码将启用所有 Ember-Bootstrap 文本区域的自动调整大小。如果您需要精细控制,您还可以autoresize: true从组件定义中删除。autoresize=true这将允许您通过传递到{{form.element}}组件调用来单独启用自动调整大小。