【发布时间】:2021-03-25 15:11:15
【问题描述】:
我正在为我的 Meteor 项目中的 afQuickfield 设计一个自定义的 autocomplete 类型。我遇到的问题是,当我在afQuickfield 上设置type="autocomplete" 时,缺少class="form-control" 属性。对于所有其他字段类型,都包括在内。
我在meteor-autoform 的整个代码库以及bootstrap 库的scss 和js 目录中查找了form-control。我只在 scss/css 中的更改日志和类定义中看到出现。
我可以只在afQuickfield 定义中包含class="form-control",但那是一个猴子补丁,我不喜欢偷工减料。
谁能帮我理解form-control 是如何在autoForm 字段中分配的?
这是我的自定义 autocomplete 代码(这是一个 WIP,所以不要评判!)。我只是希望从具有正确 atts 的文本元素开始,以便我可以从那里构建。
// autocomplete.js
AutoForm.addInputType('autocomplete', {
template: 'afAutocomplete',
valueOut: function () {
return this.val()
},
valueConverters: {
stringArray: AutoForm.valueConverters.stringToStringArray,
number: AutoForm.valueConverters.stringToNumber,
numberArray: AutoForm.valueConverters.stringToNumberArray,
boolean: AutoForm.valueConverters.stringToBoolean,
booleanArray: AutoForm.valueConverters.stringToBooleanArray,
date: AutoForm.valueConverters.stringToDate,
dateArray: AutoForm.valueConverters.stringToDateArray
},
contextAdjust: function (context) {
context.atts.autocomplete = 'off'
return context
}
})
// autocomplete.html
<template name="afAutocomplete">
<input type="text" value="{{this.value}}" {{this.atts}} />
</template>
这是来自type="text" 字段的代码,用于比较。
// text.js
AutoForm.addInputType('text', {
template: 'afInputText',
valueOut: function () {
return this.val()
},
valueConverters: {
stringArray: AutoForm.valueConverters.stringToStringArray,
number: AutoForm.valueConverters.stringToNumber,
numberArray: AutoForm.valueConverters.stringToNumberArray,
boolean: AutoForm.valueConverters.stringToBoolean,
booleanArray: AutoForm.valueConverters.stringToBooleanArray,
date: AutoForm.valueConverters.stringToDate,
dateArray: AutoForm.valueConverters.stringToDateArray
},
contextAdjust: function (context) {
if (typeof context.atts.maxlength === 'undefined' && typeof context.max === 'number') {
context.atts.maxlength = context.max
}
return context
}
})
// text.html
<template name="afInputText">
<input type="text" value="{{this.value}}" {{this.atts}}/>
</template>
如您所见,两者几乎相同,但自动完成版本在实际 HTML 输出中没有 form-control 类。
有什么想法吗?
【问题讨论】:
标签: javascript bootstrap-4 meteor-autoform