如何使Netlify CMS的列表小部件返回数字

Fai*_*wan 3 jekyll netlify netlify-cms

我想在我的Jekyll网站上使用Netlify CMS,我有这样的布局:

{% for skills in page.skills %}
    <div class="guide-skill">
        <div class="guide-skill-fill">
            {% for i in (1..15) %}
            <div class="{% if skills.levels contains i %}fill{% endif %} skill-check"><p>{{ i }}</p></div>
            {% endfor %}
        </div>
    </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

以及我在使用此布局的文本编辑器中编写的页面的前端问题:

skills:
  - levels:
      - 1
Run Code Online (Sandbox Code Playgroud)

代码工作正常,fill类正确添加.

但是当我使用Netlify CMS和列表小部件时,它会将字符串而不是数字返回到levels列表中,如下所示:

skills:
  - levels:
      - '1'
Run Code Online (Sandbox Code Playgroud)

所以代码不起作用,如何让它返回数字?

我试过的

  • 引用i,但它给了我一个错误
  • 使用valueType : "int",没用

我的配置

- label: "Hero Skills"
  name: "skills"
  widget: "list"
  required: false
  fields:
      - {label: "Skill Number", name: "number", widget: "number"}
      - {label: "Levels", name: "levels", widget: "list"}
Run Code Online (Sandbox Code Playgroud)

Sha*_*art 7

内置窗口小部件都不能输出数字列表(不是字符串),但是当内置窗口小部件不起作用时,您总是可以使用自定义窗口小部件.自定义小部件是React组件,我们为那些不使用模块系统的人发布全局挂钩(createClass,h).更多文档:https://www.netlifycms.org/docs/custom-widgets/#registerwidget

对于您的特定情况,您可以从文档示例中修改"类别"窗口小部件,以仅处理数字并输出它们.在index.htmlNetlify CMS文件的body标签末尾添加:

<script>
  var NumberListControl = createClass({
    handleChange: function(e) {
      var value = e.target.value.replace(/[^0-9, ]/, '');
      this.props.onChange(value.split(',').map(function(val) {
        var trimmed = val.trim();
        return trimmed ? parseInt(trimmed, 10) : trimmed;
      }));
    },

    render: function() {
      var value = this.props.value;
      return h('input', {
        type: 'text',
        value: value ? value.join(', ') : '',
        onChange: this.handleChange,
        className: this.props.classNameWrapper,
      });
    }
  });

  var NumberListPreview = createClass({
    render: function() {
      return h('ul', {},
        this.props.value.map(function(val, index) {
          return h('li', {key: index}, val);
        })
      );
    }
  });

  CMS.registerWidget('number_list', NumberListControl, NumberListPreview);
</script>
Run Code Online (Sandbox Code Playgroud)