Polymer 1.x: Как использовать функцию dataSource для фильтрации железных таблиц данных?

Вот Plunk.

Я хочу реализовать dataSource функция фильтрации для <iron-data-table как описано в принятом ответе на этот вопрос. Моя проблема в том, что документы здесь не дают пример того, как это сделать.

В конце концов, я захочу иметь сложный набор фильтров (например, панель управления) для большого набора данных элементов.

Я попытался скопировать подход, используемый dom-repeat описано в документации здесь, но безуспешно.

http://plnkr.co/edit/cGykY65HWnK4pIQ0qx8O?p=preview
<iron-data-table
    items="[[users.results]]"
    data-source="source(item)">
...
    source: function(item) {
      return item.user.name.first.length > 6;
    },

Как правильно реализовать dataSource функция свойства для фильтрации элементов <iron-data-table?

2 ответа

Решение

dataSource Свойство принимает в качестве значения функцию, поэтому самый простой способ - определить свойство функции в родительском элементе и использовать обычные привязки Polymer для его передачи.

Сигнатура функции, к сожалению, не очень четко определена, но в iron-data-table демонстрационные страницы: http://saulis.github.io/iron-data-table/demo/ (пример удаленных данных)

Я обновил ваш Plunkr соответственно: http://plnkr.co/edit/VWIAvWAnuf2aiCjJjCdI?p=preview

Для полноты код в принятом ответе выглядит следующим образом:

http://plnkr.co/edit/VWIAvWAnuf2aiCjJjCdI?p=preview
<base href="https://polygit.org/polymer+:master/iron-data-table+Saulis+:master/components/">
<link rel="import" href="polymer/polymer.html">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>

<link rel="import" href="iron-ajax/iron-ajax.html">
<link rel="import" href="paper-button/paper-button.html">

<link rel="import" href="iron-data-table/iron-data-table.html">

<dom-module id="content-el">
    <template>
        <style></style>

    <iron-ajax
      auto
      url="https://saulis.github.io/iron-data-table/demo/users.json" 
      last-response="{{users}}">
    </iron-ajax>
    <iron-data-table
        data-source="[[dataSource]]">
      <data-table-column name="Picture" width="50px" flex="0">
        <template>
          <img src="[[item.user.picture.thumbnail]]">
        </template>
      </data-table-column>
      <data-table-column name="First Name">
        <template>[[item.user.name.first]]</template>
      </data-table-column>
      <data-table-column name="Last Name">
        <template>[[item.user.name.last]]</template>
      </data-table-column>
      <data-table-column name="Email">
        <template>[[item.user.email]]</template>
      </data-table-column>
    </iron-data-table>

    </template>

  <script>
    (function() {
      'use strict';
      Polymer({
        is: 'content-el',

        properties: {
          users: Array,
          dataSource: Function
        },

        observers: ['_usersChanged(users)'],

        _usersChanged: function(users) {
          this.dataSource = function(params, callback) {
            var filteredUsers = users.results.filter(function(item) {
              return item.user.name.first.length > 6;
            });

            callback(filteredUsers, filteredUsers.length);   
          };
        }
      });
        })();
  </script>
</dom-module>
Другие вопросы по тегам