Пользовательские полимерные элементы, мешающие друг другу - PullRequest
0 голосов
/ 21 января 2020

Я создал пользовательский элемент Polymer 3 pm-builder, который используется для создания списка раскрывающихся меню для плана счетов, в котором план счетов разделен сегментом, т.е. стоимостью, активами, обязательствами и т. Д. c. Этот элемент будет извлекать план счетов из базы данных по уровням, от уровня 1 до уровня 12.

Когда у меня есть этот элемент Polymer более одного раза, они, кажется, мешают друг другу в отношении их железо - ajax звонки.

pm-builder

...
static get template()
{
    return html`
    ...
    <iron-ajax auto id="getTier1"
               url="[[_getUrl('COA/GetTier1')]]"
               body="[[_getTier1Params()]]"
               method="POST"
               content-type="application/json"
               handle-as="json"
               last-response="{{lists.tier1}}">
    </iron-ajax>
    ...`;
}
...
static get properties()
{
    return {
    ...
        lists:
        {
            type: Object,
            value:
            {
                tier1: [],
                tier2: [],
                tier3: [],
                tier4: [],
                tier5: [],
                tier6: [],
                tier7: [],
                tier8: [],
                tier9: [],
                tier10: [],
                tier11: [],
                tier12: []
            }
        },
        segment:
        {
            type: String
        }
    ...
    };
}
...
_getTier1Params()
{
    var obj = { segment: this.segment };
    return obj;
}
...

pm-use-builder

...
<div class="level1">Assets</div>
<pm-mscoa-builder id="assetsBuilder"
                  segment="assets">
</pm-mscoa-builder>

<div class="level1">Liabilities</div>
<pm-mscoa-builder id="liabilitiesBuilder"
                  segment="liabilities">
</pm-mscoa-builder>
...

Когда два компилятора загружаются, они правильно вызывают функцию GetTier1 со своим соответствующим параметром, но когда возвращаются вызовы iron- ajax, только значение assetsBuilder lists.tier1 устанавливается со значением iron- ajax который вернулся последним, даже если это железо - ajax было от liabilitiesBuilder.

Я пытался дать железу - ajax вызов уникального идентификатора (getTier1-assets и getTier1-liabilities), но это не имело никакого значения.

РЕДАКТИРОВАТЬ

Чтобы подтвердить это, я реализовал функцию печати внутри pm-builder, которая печатает первый список, lists.tier1. Результат выглядит следующим образом:

========== PRINT ==========
this.id: assetsBuilder
this.segment: assets
this.lists.tier1:
tier1[0].Name: Community and Social Services
tier1[1].Name: Energy Sources
tier1[2].Name: Environmental Protection
tier1[3].Name: Executive and Council
tier1[4].Name: Finance and Administration
tier1[5].Name: Health
tier1[6].Name: Housing
tier1[7].Name: Internal Audit
tier1[8].Name: Other
tier1[9].Name: Planning and Development
tier1[10].Name: Public Safety
tier1[11].Name: Road Transport
tier1[12].Name: Sport and Recreation
tier1[13].Name: Waste Management
tier1[14].Name: Waste Water Management
tier1[15].Name: Water Management
========== PRINT ==========
this.id: liabilitiesBuilder
this.segment: liabilities
this.lists.tier1:
tier1[0].Name: Community and Social Services
tier1[1].Name: Energy Sources
tier1[2].Name: Environmental Protection
tier1[3].Name: Executive and Council
tier1[4].Name: Finance and Administration
tier1[5].Name: Health
tier1[6].Name: Housing
tier1[7].Name: Internal Audit
tier1[8].Name: Other
tier1[9].Name: Planning and Development
tier1[10].Name: Public Safety
tier1[11].Name: Road Transport
tier1[12].Name: Sport and Recreation
tier1[13].Name: Waste Management
tier1[14].Name: Waste Water Management
tier1[15].Name: Water Management

Список в assetsBuilder должен содержать только 3 элемента, и ни один из них не соответствует именам, которые должны быть там.

...