当再次选择当前选定的项目时,iron-data-table selected-item抛出'null'

时间:2016-08-01 20:26:41

标签: polymer polymer-1.0 iron-data-table

iron-data-table中,当我点击任何 当前选定的行 时,我希望selected-item{{selectedItem}})对象能够反映出来当前(和以前)选定的行;但相反,它变为null

重新创建问题的步骤:

  1. Open this jsBin
  2. 选择任意一行。
  3. 注意所选对象打印到页面顶部和控制台。
  4. 选择其他行。
  5. 请注意,新选择的项目会打印到页面顶部和控制台。
  6. 清除控制台。 (可选。将帮助您查看下一步的结果。)
  7. 点击 当前选中 行。
  8. 注意selected-item{{selectedItem}})对象现在是null
  9. 如何更正这一点,以便所选对象是新选择的行(以前选择的行)而不是null?

    http://jsbin.com/xucemijada/1/edit?html,console,output
    <!DOCTYPE html>
    <html>  
      <head>
        <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">
        <link rel="import" href="iron-data-table/default-styles.html">
      </head>
      <body>
        <x-foo></x-foo>
        <dom-module id="x-foo">
          <template>
            <style>
            </style>
            [[_computeSelectedStr(selectedItem)]]
    
            <iron-ajax
                auto
                url="https://saulis.github.io/iron-data-table/demo/users.json" 
                last-response="{{users}}"
                >
            </iron-ajax>
            <iron-data-table id="grid"
                             selection-enabled
                             items="[[users.results]]"
                             selected-item="{{selectedItem}}"
                             >
              <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: 'x-foo',
                observers: [
                  '_selectedItemChanged(selectedItem)' ,
                ],
                _selectedItemChanged: function(ob) {
                  console.log('selectedItem', ob);
                },
                _computeSelectedStr: function(ob) {
                  return JSON.stringify(ob);
                },
              });
            })();
          </script>
        </dom-module>
      </body>
    </html>
    

1 个答案:

答案 0 :(得分:1)

当第二次点击某一行时,该项目会被取消选中,并且null中的selectedItem意味着反映这一点。同样,在多选模式下,selectedItems在没有选择任何内容时为空。

由于v1.0.1 <iron-data-table>会触发可用于阻止取消选择的deselecting-item事件。

table.addEventListener('deselecting-item', function(e) { e.preventDefault(); });

我已更新您的JSBin以显示如何使用此事件的示例:http://jsbin.com/dubuyoy/edit?html,console,output