【问题标题】:Selectize.js custom rendering with static htmlSelectize.js 使用静态 html 自定义渲染
【发布时间】:2014-06-06 01:25:35
【问题描述】:

我正在使用出色的 selectize.js 库来生成带有选项组的有吸引力的选择框。一切正常,但我无法使用示例页面(电子邮件联系人)http://brianreavis.github.io/selectize.js/ 中的自定义渲染器,因为“item”不知道“email”属性。我知道如何在 javascript 中执行此操作,但是如何在静态 html 中定义这两个属性?

在 js 中是这样的

$('#id').selectize({
  ...
  options: [
    { name: "Martin", email: "martin@asdf.at" }
  ],
  ....
}

我尝试了以下方法:

<select>
  <option value="Martin|martin@asdf.at" data-name="Martin" data-email="martin@asdf.at">
    Martin
  </option>
</select>

但这不起作用...最后从示例中获取渲染函数:

render: {
    item: function(item, escape) {
        return '<div>' +
            (item.name ? '<span class="name">' + escape(item.name) + '</span>' : '') +
            (item.email ? '<span class="email">' + escape(item.email) + '</span>' : '') +
        '</div>';
    },
    option: function(item, escape) {
        var label = item.name || item.email;
        var caption = item.name ? item.email : null;
        return '<div>' +
            '<span class="label">' + escape(label) + '</span>' +
            (caption ? '<span class="caption">' + escape(caption) + '</span>' : '') +
        '</div>';
    }
}

我会感谢任何提示!

问候, 马丁

【问题讨论】:

  • 你处理过这个问题吗?我实际上想显示自定义项目,但不想使用 ajax 来获取数据。只是想以某种方式使用静态 HTML 来实现
  • 您好。你解决了吗?我是同一条船。

标签: javascript selectize.js


【解决方案1】:

使用这个例子:

var clearhack = $('.selectized').selectize({
    valueField: 'id',
    labelField: 'name',
    searchField: ['name'],
    sortField: 'score',//this is set to 'name' on my version, but seems sortField is only used together with load-function and score-function
    sortDirection: 'desc',
    maxItems: 1,
    //only using options-value in jsfiddle - real world it's using the load-function
    options: [
        {"id":861,"name":"Jennifer","score":6},
        {"id":111,"name":"Jenny","score":6},
        {"id":394,"name":"Jorge","score":6},
        {"id":1065,"name":"Jorge Carlson","score":6},
        {"id":389,"name":"Ann Jennifer","score":3},
        {"id":859,"name":"Bobby Jenkins","score":3},
        {"id":264,"name":"Peter Jenkins","score":3},
        {"id":990,"name":"Fred","score":1},
        {"id":349,"name":"Kal","score":1},
        {"id":409,"name":"Louis","score":1}
    ],
    create: false,
    render: {
        option: function(item, escape) {
            return '<div>'
            + '<span>ID:'+item.id+'</span> '
            + '<span>Name:'+item.name+'</span> '
            + '<span>DEBUG:'+item.score+'</span>'
            + '</div>';
        }
    },
    score: function(search) {
        return function(item) {
            return parseInt(item.score);
        };
    }
});

【讨论】:

  • 这不能回答问题
  • 问题是如何使用静态 HTML 来做到这一点
【解决方案2】:

不确定这是否会有所帮助,因为它太晚了 - 但我使用以下方法在我的选择选项下获取标题:

html 选项如:

<option data-data='<?php echo json_encode($obj, JSON_FORCE_OBJECT) ?>' value="<?php echo $obj->id ?>"><?php echo $obj->name ?></option>

然后选择代码:

$('select#my-select').selectize({
  valueField: 'id',
  labelField: 'name',
  searchField: ['name'],
  render: {
    option: function(item, escape) {
      var label = item.name;
      var caption = item.description;
      return '<div>' +
      '<span style="display: block; color: black; font-size: 14px;">' + escape(label) + '</span>' +
      (caption ? '<span style="display: block; color: gray; font-size: 12px;">' + escape(caption) + '</span>' : '') +
      '</div>';
    }
  }
});

没有阅读很多文档,但这适用于 $obj,例如:

{ 'id': '1', 'name': 'fred', 'description': 'fred person'}

只需添加更多属性并在您的渲染选项函数中引用它们。

似乎 selectize 从 data-data 属性读取 json 来填充这些,但我相信您可以通过在初始化中传递 dataAttr 选项来更改它读取 json 的属性。

【讨论】:

  • 但是如何在render里面找到option标签属性呢?
【解决方案3】:

几分钟前我遇到了同样的问题。 我向selectize.js添加了一些代码

在函数init_select 和默认代码之后的下一个addOption 中,我添加了:

    /// iterate on data attr on <option>
    $.each($option.data(), function(i, v) {
       option[i] = v;
    });

将此代码粘贴到原始行下方:

var option             = readData($option) || {};
option[field_label]    = option[field_label] || $option.text();
option[field_value]    = option[field_value] || value;
option[field_optgroup] = option[field_optgroup] || group;

在此之后,我在 selectize 中的渲染方法适用于静态数据属性:)

【讨论】:

  • 这似乎是解决一个普遍讨论的 Selectize 问题的聪明方法......您认为您可以详细说明一下这个解决方案吗?
  • @JeffSolomon 你是什么意思? :) 你的意思是选择的扩展吗?这是旧答案,也许问题现在开箱即用地解决了
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 2017-12-16
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多