Не удается запросить элементы в повтор дом, чтобы установить значения по умолчанию переключателя - PullRequest
0 голосов
/ 24 апреля 2018

Полимер 1. *

Я пытаюсь установить значения по умолчанию в серии paper-radio-group элементов, которые живут в режиме повтора.

После того, как я заполнил форму, функция addFormData работает нормально ... она может без проблем запрашивать элементы.

Но когда форма загружается впервые, я не могу запросить элементы в функции setRadioDefaults() ... список узлов radioGroups - это просто пустой массив. Это не условие гонки, потому что я попробовал setTimeout и все еще не добился успеха. Есть идеи почему?

    addFormData: function(body) {
      // WORKS GOOD, IT FINDS THE ELEMENTS
      var radioGroups =
        this.$$('#activeForm').querySelectorAll('paper-radio-group');

      var radioGroupsArray = Array.prototype.slice.call(radioGroups);

      return radioGroupsArray.map(function(radioGroup) {
        var fieldID = radioGroup.attrForItemTitle;
        var value = radioGroup.selected;

        return {
          field_id: fieldID,
          value: value
        };
      });
    },

    setRadioDefaults: function() {
      Polymer.dom.flush();
      // WORKS BAD, DOES NOT FIND THE ELEMENTS
      var radioGroups =
        this.$$('#activeForm').querySelectorAll('paper-radio-group');

      radioGroups.forEach(function(radio) {
        radio.selected = this.noData;
      });
    },

 <template
        is="dom-repeat"
        items="[[fields]]"
        filter="_computeField">

        <div class="row">
          <label class="col1">
            [[item.field_label]]
          </label>

          <paper-radio-group
            attr-for-item-title="[[item.field_id]]"
            attr-for-selected="value"
            on-paper-radio-group-changed="_syncGlobalRadioBtns">
            <paper-radio-button
              value="[[yes]]"
              name="[[item.field_id]]"></paper-radio-button>
            <paper-radio-button
              value="[[no]]"
              name="[[item.field_id]]"></paper-radio-button>
            <paper-radio-button
              value="[[incomplete]]"
              name="[[item.field_id]]"></paper-radio-button>
          </paper-radio-group>
        </div>
      </template>

    --------------------

    setRadioDefaults: function() {
      console.log('aaa');

      Polymer.dom.flush();
      var radioGroups =
        Polymer.dom(this.root).querySelectorAll('paper-radio-group');
      console.log(radioGroups);

      radioGroups.forEach(function(radio) {
        radio.selected = this.incomplete;
      }, this)

1 Ответ

0 голосов
/ 24 апреля 2018

Вы перемещаете предметы в ShadyDom через Polymer 1.x, поэтому вам нужно применить Polymer.dom(), чтобы убедиться, что вы заметили все изменения, попробуйте Polymer.dom(this.root).querySelectorAll('paper-radio-group');, чтобы захватить эти элементы. Как:

<link rel="import"  href="https://polygit.org/polymer+^1.9.1/webcomponentsjs+^0.7.0/components/polymer/polymer.html">

<dom-module id="configurable-name-tag">

  <template>
    <!-- bind to the "owner" property -->
    <template on-dom-change="doStuff" is="dom-repeat" items="[[items]]">
      <div>[[item]]</div>
    </template>

  </template>

  <script>
    Polymer({
      is: "configurable-name-tag",
      properties: {
        // declare the owner property
        items: {
          type: Array,
          value: function() {
            return [1,2,3,4];
          }
        }
      },
      doStuff: function() {
        Polymer.dom.flush();

        alert(Polymer.dom(this.root).querySelectorAll('div').length);
      }
    });
  </script>

</dom-module>
...