javascript - 使用 dynatable 查询样式化列表

标签 javascript jquery list dynatable

虽然我一直在寻找这个问题的答案,但一直没能找到。如果互联网上有一个我没有搜索到的隐藏 Angular 落确实包含了这个问题的答案,请告诉我。

无论如何,在Dynatable website上有一个示例来查询表中的某个值。如果您的输入 html 确实是一个表格,这似乎可行,但如果您使用的是风格化列表,则在我的情况下会产生以下错误:

Uncaught TypeError: Cannot read property 'length' of null

这可以追溯到 dynatable.jquery.js 文件的第 1582 行:

    // Find an object in an array of objects by attributes.
// E.g. find object with {id: 'hi', name: 'there'} in an array of objects
findObjectInArray: function(array, objectAttr) {
  var _this = this,
      foundObject;
  for (var i = 0, len = array.length; i < len; i++) {
    var item = array[i];
    // For each object in array, test to make sure all attributes in objectAttr match
    if (_this.allMatch(item, objectAttr, function(item, key, value) { return item[key] == value; })) {
      foundObject = item;
      break;
    }
  }

下面是我的选择元素:

        <select id="filter-prop" name="prop">
          <option>All</option>
          <option>First Run</option>
          <option>Rejected</option>
        </select>

以及我的列表的可动态转换:

            // Function that renders the list items from our records
        function ulWriter(rowIndex, record, columns, cellWriter) {
          var cssClass = record.prop, li;
          if (rowIndex % 3 === 0) { cssClass += ' first'; }
          li = '<li class="' + cssClass + '"><div class="thumbnail"><div class="thumbnail-image">' + record.thumbnail + '</div><div class="caption">' + record.caption + '</div></div></li>';
          return li;
        }

        // Function that creates our records from the DOM when the page is loaded
        function ulReader(index, li, record) {
          var $li = $(li),
              $caption = $li.find('.caption');
          record.thumbnail = $li.find('.thumbnail-image').html();
          record.caption = $caption.html();
          record.label = $caption.find('h3').text();
          record.description = $caption.find('p').text();
          record.color = $li.data('color');
          record.prop = $li.attr('class');
        }

        var pictable = $('#picturelist').dynatable({
          table: {
            bodyRowSelector: 'li'
          },
          features :{
            recordCount: false,
            sorting: false,
          },
          dataset: {
            perPageDefault: 10,
            perPageOptions: [5, 10, 15, 20]
          },
          writers: {
            _rowWriter: ulWriter
          },
          readers: {
            _rowReader: ulReader
          },
          params: {
            records: 'objects'
          }
        }).data('dynatable');


        $('#filter-prop').change( function() {
            var value = $(this).val();
            if (value === "All") {
                pictable.queries.remove("Prop");
            } else if (value === "First Run") {
                pictable.queries.add("Prop","span4 firstrun rejected");
                pictable.queries.add("Prop","span4 firstrun");
            } else if (value === "Rejected") {
                pictable.queries.add("Prop","span4 firstrun rejected");
                pictable.queries.add("Prop","span4 rejected");
            };
            pictable.process();
        });

我对网站的示例没有太大改变。我做的最多的就是将列表示例与查询示例合并。同样,如果我对表应用类似的方法,它似乎有效,但对于我的列表却无效。出了什么问题?

最佳答案

这里的文档不是很清楚,但我今天早些时候为自己解决了同样的问题。这是您的工作代码:

var pictable = $('#picturelist')

    .bind('dynatable:init', function(e, dynatable) {
        dynatable.queries.functions['prop'] = function(record, queryValue) {

            if ( record.prop == queryValue )
            {
                return true;
            }
            else
            {
                return false;
            }

        };
    })

    .dynatable({
        table: {
            bodyRowSelector: 'li'
        },
        features :{
            recordCount: false,
            sorting: false
        },
        dataset: {
            perPageDefault: 10,
            perPageOptions: [5, 10, 15, 20]
        },
        writers: {
            _rowWriter: ulWriter
        },
        readers: {
            _rowReader: ulReader
        },
        params: {
            records: 'objects'
        }
}).data('dynatable');


$('#filter-prop').change( function() {
    var value = $(this).val();
    if (value === "All")
    {
        pictable.queries.remove("prop");
    }
    else
    {
        pictable.queries.add("prop", value)
    }

    pictable.process();
});

干杯

关于javascript - 使用 dynatable 查询样式化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513028/

相关文章:

javascript - 在 pos Odoo-8 中创建收据

JavaScript:正则表达式将此 "2018Jun12-2018Jul11"日期字符串替换为此 "Jun 12, 2018 - Jul 11, 2018"日期字符串

javascript - 如何使用 jquery 和 wp_enqueue_script

python - 将包含值列表的字典转换为数据框

javascript - for 循环、console.log、返回、未定义和作用域

javascript - jqgrid 中没有使用 XML 加载数据

javascript - Jquery Ajax beforeSend 和成功、错误和完成

javascript - 如何在 JavaScript 中使用自定义变量

python - 从文本文件中订购具有多种数据类型的列表

python - 使用 Nones 查找最小元素及其在列表中的位置