Polymer 聚合物1.x:切换

Polymer 聚合物1.x:切换,polymer,polymer-1.0,Polymer,Polymer 1.0,我想使用切换项目。 单击员工列表中的一个或多个项目。 请参见以下所选列表中显示的项目。 从顶部员工列表的“静止”中,单击底部所选列表中显示的项目。 请参见“从选定列表中消失”切换项。 在选定列表中,单击一个项目。 请注意,该项不会消失。 如何使所选列表项切换 http://jsbin.com/lodetopuzu/edit?html输出 <!doctype html> <head> <meta charset="utf-8"> <base hr

我想使用切换项目。 单击员工列表中的一个或多个项目。 请参见以下所选列表中显示的项目。 从顶部员工列表的“静止”中,单击底部所选列表中显示的项目。 请参见“从选定列表中消失”切换项。 在选定列表中,单击一个项目。 请注意,该项不会消失。 如何使所选列表项切换

http://jsbin.com/lodetopuzu/edit?html输出
<!doctype html>

<head>
  <meta charset="utf-8">
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">

</head>

<body>

<dom-module id="employee-list">

  <template>

    <array-selector id="selector"
                    items="{{employees}}"
                    selected="{{selected}}"
                    toggle
                    multi></array-selector>

    <div><strong>Employees</strong>:</div>
    <template is="dom-repeat"
              id="employeeList"
              items="{{employees}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>
    <br />
    <div><strong>Selected</strong>:</div>
    <template is="dom-repeat" items="{{selected}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>        

  </template>

  <script>
    Polymer({
      is: 'employee-list',
      properties: {
        employees: {
          type: Array,
          value: function() {
            return [
              { first: 'Vince' , last: 'Lombardi'   } ,
              { first: 'Weeb'  , last: 'Ewbank'     } ,
              { first: 'Hank'  , last: 'Stram'      } ,
              { first: 'Don'   , last: 'McCafferty' } ,
              { first: 'Tom'   , last: 'Landry'     } ,
              { first: 'Don'   , last: 'Shula'      } ,
              { first: 'Chuck' , last: 'Knoll'      } ,
              { first: 'John'  , last: 'Madden'     } ,
            ]
          },
        },
      },
      _toggleSelection: function(e) {
        console.log(e.target);
        var item = this.$.employeeList.itemForElement(e.target);
        this.$.selector.select(item);
      },
    });
  </script>

</dom-module>

  <employee-list></employee-list>

</body>
<!DOCTYPE html>

<head>
  <meta charset="utf-8">
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">

</head>

<body>

<dom-module id="employee-list">

  <template>

    <array-selector id="selector"
                    items="{{employees}}"
                    selected="{{selected}}"
                    toggle
                    multi></array-selector>

    <div><strong>Employees</strong>:</div>
    <template is="dom-repeat"
              id="employeeList"
              items="{{employees}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>
    <br />
    <div><strong>Selected</strong>:</div>
    <template is="dom-repeat"
              id="selectedList"
              items="{{selected}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>        

  </template>

  <script>
    Polymer({
      is: 'employee-list',
      properties: {
        employees: {
          type: Array,
          value: function() {
            return [
              { first: 'Vince' , last: 'Lombardi'   } ,
              { first: 'Weeb'  , last: 'Ewbank'     } ,
              { first: 'Hank'  , last: 'Stram'      } ,
              { first: 'Don'   , last: 'McCafferty' } ,
              { first: 'Tom'   , last: 'Landry'     } ,
              { first: 'Don'   , last: 'Shula'      } ,
              { first: 'Chuck' , last: 'Knoll'      } ,
              { first: 'John'  , last: 'Madden'     } ,
            ]
          },
        },
      },
      _toggleSelection: function(e) {
        var item1 = this.$.selectedList.itemForElement(e.target);
        var item2 = this.$.employeeList.itemForElement(e.target);
        this.$.selector.select(item1||item2);
      },
    });
  </script>

</dom-module>

  <employee-list></employee-list>

</body>
</html>

问题是,您对这两个选项使用相同的_toggleSelection

这一行在_切换选择


单击第二个dom repeat中的项目时无效。

问题是您对这两个项目使用了相同的切换选择

这一行在_切换选择


单击第二个dom repeat中的项目时无效。

解决方案更改函数

_toggleSelection: function(e) {  
   var item1  = this.$.selectedList.itemForElement(e.target);        
   var item =  this.$.employeeList.itemForElement(e.target); 
   this.$.selector.select(item||item1);
}
并将所选列表的id添加到selectedList

<template id="selectedList" is="dom-repeat" items="{{selected}}">

解决方案改变功能

_toggleSelection: function(e) {  
   var item1  = this.$.selectedList.itemForElement(e.target);        
   var item =  this.$.employeeList.itemForElement(e.target); 
   this.$.selector.select(item||item1);
}
并将所选列表的id添加到selectedList

<template id="selectedList" is="dom-repeat" items="{{selected}}">

正如@GünterZöchbauer所说,方法.itemforemente.target应用于$.employeeList引用的元素,它是第一个列表,而不是第二个列表

@Alon提供的解决方案全文如下:

http://jsbin.com/yowicumiyu/1/edit?html输出
<!doctype html>

<head>
  <meta charset="utf-8">
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">

</head>

<body>

<dom-module id="employee-list">

  <template>

    <array-selector id="selector"
                    items="{{employees}}"
                    selected="{{selected}}"
                    toggle
                    multi></array-selector>

    <div><strong>Employees</strong>:</div>
    <template is="dom-repeat"
              id="employeeList"
              items="{{employees}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>
    <br />
    <div><strong>Selected</strong>:</div>
    <template is="dom-repeat" items="{{selected}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>        

  </template>

  <script>
    Polymer({
      is: 'employee-list',
      properties: {
        employees: {
          type: Array,
          value: function() {
            return [
              { first: 'Vince' , last: 'Lombardi'   } ,
              { first: 'Weeb'  , last: 'Ewbank'     } ,
              { first: 'Hank'  , last: 'Stram'      } ,
              { first: 'Don'   , last: 'McCafferty' } ,
              { first: 'Tom'   , last: 'Landry'     } ,
              { first: 'Don'   , last: 'Shula'      } ,
              { first: 'Chuck' , last: 'Knoll'      } ,
              { first: 'John'  , last: 'Madden'     } ,
            ]
          },
        },
      },
      _toggleSelection: function(e) {
        console.log(e.target);
        var item = this.$.employeeList.itemForElement(e.target);
        this.$.selector.select(item);
      },
    });
  </script>

</dom-module>

  <employee-list></employee-list>

</body>
<!DOCTYPE html>

<head>
  <meta charset="utf-8">
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">

</head>

<body>

<dom-module id="employee-list">

  <template>

    <array-selector id="selector"
                    items="{{employees}}"
                    selected="{{selected}}"
                    toggle
                    multi></array-selector>

    <div><strong>Employees</strong>:</div>
    <template is="dom-repeat"
              id="employeeList"
              items="{{employees}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>
    <br />
    <div><strong>Selected</strong>:</div>
    <template is="dom-repeat"
              id="selectedList"
              items="{{selected}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>        

  </template>

  <script>
    Polymer({
      is: 'employee-list',
      properties: {
        employees: {
          type: Array,
          value: function() {
            return [
              { first: 'Vince' , last: 'Lombardi'   } ,
              { first: 'Weeb'  , last: 'Ewbank'     } ,
              { first: 'Hank'  , last: 'Stram'      } ,
              { first: 'Don'   , last: 'McCafferty' } ,
              { first: 'Tom'   , last: 'Landry'     } ,
              { first: 'Don'   , last: 'Shula'      } ,
              { first: 'Chuck' , last: 'Knoll'      } ,
              { first: 'John'  , last: 'Madden'     } ,
            ]
          },
        },
      },
      _toggleSelection: function(e) {
        var item1 = this.$.selectedList.itemForElement(e.target);
        var item2 = this.$.employeeList.itemForElement(e.target);
        this.$.selector.select(item1||item2);
      },
    });
  </script>

</dom-module>

  <employee-list></employee-list>

</body>
</html>

正如@GünterZöchbauer所说,方法.itemforemente.target应用于$.employeeList引用的元素,它是第一个列表,而不是第二个列表

@Alon提供的解决方案全文如下:

http://jsbin.com/yowicumiyu/1/edit?html输出
<!doctype html>

<head>
  <meta charset="utf-8">
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">

</head>

<body>

<dom-module id="employee-list">

  <template>

    <array-selector id="selector"
                    items="{{employees}}"
                    selected="{{selected}}"
                    toggle
                    multi></array-selector>

    <div><strong>Employees</strong>:</div>
    <template is="dom-repeat"
              id="employeeList"
              items="{{employees}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>
    <br />
    <div><strong>Selected</strong>:</div>
    <template is="dom-repeat" items="{{selected}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>        

  </template>

  <script>
    Polymer({
      is: 'employee-list',
      properties: {
        employees: {
          type: Array,
          value: function() {
            return [
              { first: 'Vince' , last: 'Lombardi'   } ,
              { first: 'Weeb'  , last: 'Ewbank'     } ,
              { first: 'Hank'  , last: 'Stram'      } ,
              { first: 'Don'   , last: 'McCafferty' } ,
              { first: 'Tom'   , last: 'Landry'     } ,
              { first: 'Don'   , last: 'Shula'      } ,
              { first: 'Chuck' , last: 'Knoll'      } ,
              { first: 'John'  , last: 'Madden'     } ,
            ]
          },
        },
      },
      _toggleSelection: function(e) {
        console.log(e.target);
        var item = this.$.employeeList.itemForElement(e.target);
        this.$.selector.select(item);
      },
    });
  </script>

</dom-module>

  <employee-list></employee-list>

</body>
<!DOCTYPE html>

<head>
  <meta charset="utf-8">
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">

</head>

<body>

<dom-module id="employee-list">

  <template>

    <array-selector id="selector"
                    items="{{employees}}"
                    selected="{{selected}}"
                    toggle
                    multi></array-selector>

    <div><strong>Employees</strong>:</div>
    <template is="dom-repeat"
              id="employeeList"
              items="{{employees}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>
    <br />
    <div><strong>Selected</strong>:</div>
    <template is="dom-repeat"
              id="selectedList"
              items="{{selected}}">
      <div on-tap="_toggleSelection">
        <span>{{item.first}}</span>
        <span>{{item.last}}</span>
      </div>
    </template>        

  </template>

  <script>
    Polymer({
      is: 'employee-list',
      properties: {
        employees: {
          type: Array,
          value: function() {
            return [
              { first: 'Vince' , last: 'Lombardi'   } ,
              { first: 'Weeb'  , last: 'Ewbank'     } ,
              { first: 'Hank'  , last: 'Stram'      } ,
              { first: 'Don'   , last: 'McCafferty' } ,
              { first: 'Tom'   , last: 'Landry'     } ,
              { first: 'Don'   , last: 'Shula'      } ,
              { first: 'Chuck' , last: 'Knoll'      } ,
              { first: 'John'  , last: 'Madden'     } ,
            ]
          },
        },
      },
      _toggleSelection: function(e) {
        var item1 = this.$.selectedList.itemForElement(e.target);
        var item2 = this.$.employeeList.itemForElement(e.target);
        this.$.selector.select(item1||item2);
      },
    });
  </script>

</dom-module>

  <employee-list></employee-list>

</body>
</html>

我的回答解决了问题?@alon:是的!谢谢!!=]+1我的回答解决了问题?@alon:是的!谢谢!!=]+1.