Blame view

bower_components/iron-list/README.md 4.47 KB
73bcce88   luigser   COMPONENTS
1
  
a53fbbed   Renato De Donato   select-dataset ne...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  <!---
  
  This README is automatically generated from the comments in these files:
  iron-list.html
  
  Edit those files, and our readme bot will duplicate them over here!
  Edit this file, and the bot will squash your changes :)
  
  The bot does some handling of markdown. Please file a bug if it does the wrong
  thing! https://github.com/PolymerLabs/tedium/issues
  
  -->
  
  [![Build status](https://travis-ci.org/PolymerElements/iron-list.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-list)
  
  _[Demo and API docs](https://elements.polymer-project.org/elements/iron-list)_
  
  
  ##&lt;iron-list&gt;
  
  `iron-list` displays a virtual, 'infinite' list. The template inside
73bcce88   luigser   COMPONENTS
23
24
25
26
27
28
29
30
31
32
33
  the iron-list element represents the DOM to create for each list item.
  The `items` property specifies an array of list item data.
  
  For performance reasons, not every item in the list is rendered at once;
  instead a small subset of actual template elements *(enough to fill the viewport)*
  are rendered and reused as the user scrolls. As such, it is important that all
  state of the list template be bound to the model driving it, since the view may
  be reused with a new model at any time. Particularly, any state that may change
  as the result of a user interaction with the list item must be bound to the model
  to avoid view state inconsistency.
  
a53fbbed   Renato De Donato   select-dataset ne...
34
  __Important:__ `iron-list` must either be explicitly sized, or delegate scrolling to an
73bcce88   luigser   COMPONENTS
35
36
37
38
39
40
41
42
  explicitly sized parent. By "explicitly sized", we mean it either has an explicit
  CSS `height` property set via a class or inline style, or else is sized by other
  layout means (e.g. the `flex` or `fit` classes).
  
  ### Template model
  
  List item templates should bind to template models of the following structure:
  
c5169e0e   Renato De Donato   a new hope
43
44
  ```js
  {
a53fbbed   Renato De Donato   select-dataset ne...
45
46
47
48
    index: 0,        // index in the item array
    selected: false, // true if the current item is selected
    tabIndex: -1,    // a dynamically generated tabIndex for focus management
    item: {}         // user data corresponding to items[index]
c5169e0e   Renato De Donato   a new hope
49
50
  }
  ```
73bcce88   luigser   COMPONENTS
51
  
e619a3b0   Luigi Serra   Controllet cross ...
52
  Alternatively, you can change the property name used as data index by changing the
73bcce88   luigser   COMPONENTS
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  `indexAs` property. The `as` property defines the name of the variable to add to the binding
  scope for the array.
  
  For example, given the following `data` array:
  
  ##### data.json
  
  ```js
  [
    {"name": "Bob"},
    {"name": "Tim"},
    {"name": "Mike"}
  ]
  ```
  
  The following code would render the list (note the name and checked properties are
  bound from the model object provided to the template scope):
  
  ```html
  <template is="dom-bind">
    <iron-ajax url="data.json" last-response="{{data}}" auto></iron-ajax>
    <iron-list items="[[data]]" as="item">
      <template>
        <div>
a53fbbed   Renato De Donato   select-dataset ne...
77
          Name: [[item.name]]
73bcce88   luigser   COMPONENTS
78
79
80
81
82
        </div>
      </template>
    </iron-list>
  </template>
  ```
e619a3b0   Luigi Serra   Controllet cross ...
83
  
a53fbbed   Renato De Donato   select-dataset ne...
84
  ### Accessibility
e619a3b0   Luigi Serra   Controllet cross ...
85
  
a53fbbed   Renato De Donato   select-dataset ne...
86
87
88
89
  `iron-list` automatically manages the focus state for the items. It also provides
  a `tabIndex` property within the template scope that can be used for keyboard navigation.
  For example, users can press the up and down keys to move to previous and next
  items in the list:
e619a3b0   Luigi Serra   Controllet cross ...
90
  
a53fbbed   Renato De Donato   select-dataset ne...
91
92
93
94
95
96
97
98
  ```html
  <iron-list items="[[data]]" as="item">
    <template>
      <div tabindex$="[[tabIndex]]">
        Name: [[item.name]]
      </div>
    </template>
  </iron-list>
eb240478   Luigi Serra   public room cards...
99
100
  ```
  
c5169e0e   Renato De Donato   a new hope
101
102
  ### Styling
  
a53fbbed   Renato De Donato   select-dataset ne...
103
  You can use the `--iron-list-items-container` mixin to style the container of items:
eb240478   Luigi Serra   public room cards...
104
  
c5169e0e   Renato De Donato   a new hope
105
106
107
108
109
110
111
  ```css
  iron-list {
   --iron-list-items-container: {
      margin: auto;
    };
  }
  ```
e619a3b0   Luigi Serra   Controllet cross ...
112
  
a53fbbed   Renato De Donato   select-dataset ne...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  ### Resizing
  
  `iron-list` lays out the items when it receives a notification via the `iron-resize` event.
  This event is fired by any element that implements `IronResizableBehavior`.
  
  By default, elements such as `iron-pages`, `paper-tabs` or `paper-dialog` will trigger
  this event automatically. If you hide the list manually (e.g. you use `display: none`)
  you might want to implement `IronResizableBehavior` or fire this event manually right
  after the list became visible again. For example:
  
  ```js
  document.querySelector('iron-list').fire('iron-resize');
  ```
  
c5169e0e   Renato De Donato   a new hope
127
  ### When should `<iron-list>` be used?
e619a3b0   Luigi Serra   Controllet cross ...
128
  
a53fbbed   Renato De Donato   select-dataset ne...
129
130
131
132
133
134
135
136
137
  `iron-list` should be used when a page has significantly more DOM nodes than the ones
  visible on the screen. e.g. the page has 500 nodes, but only 20 are visible at the time.
  This is why we refer to it as a `virtual` list. In this case, a `dom-repeat` will still
  create 500 nodes which could slow down the web app, but `iron-list` will only create 20.
  
  However, having an `iron-list` does not mean that you can load all the data at once.
  Say, you have a million records in the database, you want to split the data into pages
  so you can bring a page at the time. The page could contain 500 items, and iron-list
  will only render 20.
e619a3b0   Luigi Serra   Controllet cross ...