Polymer 警告 如果项目和所选项目都有初始值,并且项目是基于所选项目计算的,则事情会变得棘手-可能会在设置初始值之前运行计算,具体取决于声明顺序

Polymer 警告 如果项目和所选项目都有初始值,并且项目是基于所选项目计算的,则事情会变得棘手-可能会在设置初始值之前运行计算,具体取决于声明顺序,polymer,polymer-1.0,Polymer,Polymer 1.0,当items位于第一位时,顺序似乎是items value、selected value、items compute和items compute。items具有初始值 当selected首先被取消关联时,然后首先运行选中的值,从而触发项目计算。现在,如果items compute返回undefined,则采用items value,但如果items compute返回值,则items value似乎从未使用过(通过在\u computeItems中取消注释代码进行检查) 您介意在jsBin中显示

items
位于第一位时,顺序似乎是items value、selected value、items compute和items compute。items具有初始值

  • selected
    首先被取消关联时,然后首先运行选中的值,从而触发项目计算。现在,如果items compute返回undefined,则采用items value,但如果items compute返回值,则items value似乎从未使用过(通过在
    \u computeItems
    中取消注释代码进行检查)


  • 您介意在jsBin中显示一些代码吗?我尝试了你所描述的各种组合。对不起,我尝试过,但很难理解你到底想要实现什么。如果你能简化你的代码,我可以再看看。我自己不是用JS开发的(只有Dart),所以JS对我来说很难。你介意在jsBin中展示一些代码吗?我尝试了你所描述的各种组合。对不起,我尝试过,但很难理解你到底想要实现什么。如果你能简化你的代码,我可以再看看。我自己不开发JS(只有Dart),因此JS对我来说很难。
    Lorem,Ipsum,foo,1,bar,1,baz,0,qux,0
    
    Lorem,Ipsum,foo,0,bar,0,baz,0,qux,0
    
    Lorem,Ipsum,foo,1,bar,1,baz,0,qux,0
    
    <!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="x-element">
    
    <template>
      <button on-tap="_show">Show</button>
      <div>{{selected}}</div>
      <div>{{items}}</div>
    </template>
    
    <script>
      (function(){
        Polymer({
          is: 'x-element',
          properties: {
            items: {
              type: Array,
              notify: true,
              reflectToAttribute: true,
              computed: '_computeItems(selected)',
              value: function() {
                return [['Lorem', 'Ipsum'], ['foo', 0], ['bar', 0], ['baz', 0], ['qux', 0],];
              }
            },
            selected: {
              type: Array,
              notify: true,
              reflectToAttribute: true,
            },
          },
          _computeItems: function(a) {
            var out = this.items,
                selectedLength = a.length,
                i = out.length;
            while(i---1){
              var j = selectedLength;
              while(j--) {
                if(a.indexOf(out[i][0])===-1){
                  out[i][1] = 0;
                }
                else if(a.indexOf(out[i][0])>-1){
                  out[i][1] = 1;
                }
                else {
                  console.log('Error: Undefined index of selected item');
                }
              }
            }
            return out;
          },
          ready: function(){
            this.set('items', this._computeItems(this.seletcted));
          },
          _show: function() {
            console.log('Selected: ' + this.selected);
            console.log('Items: ' + this.items);
          },
        });
      })();
    
    </script>
    
    </dom-module>
    
    <x-element
      selected='["foo","bar"]'
    ></x-element>
    
    </body>