首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用autoForm,引导4时,“窗体控件”类在哪里设置?

当使用autoForm,引导4时,“窗体控件”类在哪里设置?
EN

Stack Overflow用户
提问于 2020-12-14 23:54:24
回答 1查看 55关注 0票数 1

我正在为我的Meteor项目中的autocomplete设计一个定制的afQuickfield类型。我遇到的问题是,当我在type="autocomplete"上设置afQuickfield时,class="form-control"属性就丢失了。对于所有其他字段类型,它包括在内。

我在meteor-autoform的整个代码库以及bootstrap库的scssjs目录中对meteor-autoform表示祝贺。我只看到scss/css中的changelog和类定义中出现的情况。

我可以将class="form-control"包含在afQuickfield定义中,但这是一个猴子补丁,我不喜欢偷工减料。

有人能帮助我理解form-control是如何在autoForm字段中分配的吗?

这是我的自定义autocomplete代码(这是一个WIP,所以没有评判!)我只是希望从一个带有适当atts的文本元素开始,这样我就可以在那里构建了。

代码语言:javascript
复制
// 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"字段的代码以供比较。

代码语言:javascript
复制
// 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中,autocomplete版本没有form-control类。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-15 13:41:13

实际上,这似乎是来自AutoForm的后续bug,因为当包含afInputText时,它应该已经抛出以下错误

有多个模板名为“afInputText”。每个模板都需要一个唯一的名称。

失踪的form-control怎么办?

这本身是正确的,因为在class模板中的input上没有任何afAutoComplete属性。

AutoForm内置输入类型没有类属性,因为它们将是被主题覆盖

例如,引导4主题中的text输入当前如下所示:

代码语言:javascript
复制
<template name="afInputText_bootstrap4">
  <input type="text" value="{{this.value}}" {{attsPlusFormControlClass}}/>
</template>

它本身就是定义为助手

那么如何安全地定义模板呢?

由于有一天,您将从Bootstrap 4迁移到Bootstrap 5,因此您实际上可以创建上面定义的组件+逻辑:

代码语言:javascript
复制
// 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
  }
})
代码语言:javascript
复制
// autocomplete.html
<template name="afAutocomplete">
  <input type="text" value="{{this.value}}" {{this.atts}} />
</template>

此外,还创建一个单独的模板,该模板覆盖样式:

代码语言:javascript
复制
<template name="afAutocomplete_bootstrap4">
    <input type="text" class="form-control" value="{{this.value}}" {{attsPlusFormControlClass}} />
</template>

这里重要的是afAutocomplete_bootstrap4的组合,这是AutoForm用来确定当前模板的组合,只要默认模板设置为bootstrap4,或者当前表单使用bootstrap4作为主题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65298170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档