Вызов метода изнутри дом-повтор в полимере
У меня такая ситуация, когда мне нужно вызвать метод из Dom-Repe. Ниже мой код
<template is='dom-repeat' items="[[_dataArray]]" as="rowItem">
<template is='dom-repeat' items="[[_objectArray]]" as="columnItem">
<template>
<span>[[_getColumnItemValue(rowItem, columnItem)]]</span>
</template>
</template>
</template>
и в моем _getColumnItemValue
метод, я хочу получить значение для объекта с ключом, указанным columnData
приписывать.
подобно rowData[columnData]
_getColumnItemValue: function(rowData, columnData) {
return rowData[columnData];
}
Моя проблема в методе _getColumnItemValue
не вызывается. Есть ли лучший способ добиться этого?
2 ответа
Если ваш код точно такой же, как вы вставили, значит у вас слишком много <template>
теги.
<template is='dom-repeat'>
<template is='dom-repeat'>
<span></span>
</template>
</template>
Внутренний шаблон должен быть удален. Вы делаете это вместо <span>
,
Наконец-то я смог заставить эту вещь работать. Не совсем в этом случае, но в другом проекте, с точно такой же логикой. Единственным изменением было то, что мой _objectArray был не массивом строк, а массивом объектов. Так что код будет выглядеть так:
<template is="dom-repeat" items="{{tableData}}" as="rowData">
<tr>
<template is="dom-repeat" items="{{headers}}" as="columnData">
<td>
<template is="dom-if" if="{{checkType(columnData, 'check')}}">
<paper-checkbox disabled="{{getAttributeValue(columnData, 'disabled')}}" checked="{{getRowData(rowData, columnData)}}" on-change="checkBoxSelected"></paper-checkbox>
</template>
<template is="dom-if" if="{{checkType(columnData, 'led')}}">
<led-indicator on="{{!getRowData(rowData, columnData)}}"></led-indicator>
<span style="display: none;">{{getRowData(rowData, columnData)}}</span>
</template>
<template is="dom-if" if="{{checkType(columnData, 'link')}}">
<a href="javascript:void(0)" on-click="tableRowClicked">{{getRowData(rowData, columnData)}}</a>
</template>
<template is="dom-if" if="{{checkType(columnData, 'text')}}">
<span>{{getRowData(rowData, columnData)}}</span>
</template>
</td>
</template>
</tr>
</template>
Смотрите метод getRowData
getRowData: function (row, column) {
return row[column.key];
},
а также
checkType: function (columnData, type) {
var isType = false;
isType = columnData.type.toLowerCase() == type.toLowerCase();
return isType;
},
Это для таблицы, которая может динамически добавлять или удалять строки и столбцы и отображать различные типы элементов, такие как текст, ссылка, флажок некоторых из моих пользовательских элементов управления, таких как led-индикатор и т. Д.
Логика заключается в том, что массив заголовков будет использоваться для генерации столбцов таблицы, этот массив содержит объекты структуры
{
name: 'Popular Name',
key: 'PopularName',
type: 'text'
}
а таблица данных содержит массив объектов, который содержит ключ, указанный в массиве заголовков. Надеюсь, что это может быть полезно для кого-то.