Iron-data-table не может заполнить данные из привязки данных
Следующий код, взятый из этой демонстрации, работает в моем приложении:
https://saulis.github.io/iron-data-table/demo/index.html<template is="dom-bind">
<iron-ajax
url="https://saulis.github.io/iron-data-table/demo/users.json"
last-response="{{users}}"
auto>
</iron-ajax>
<iron-data-table id="items"
selection-enabled
items="[[users.results]]">
<data-table-column name="Picture" width="50px" flex="0">
<template>
<img src="[[item.user.picture.thumbnail]]">
</template>
</data-table-column>
<data-table-column name="First Name">
<template>[[item.user.name.first]]</template>
</data-table-column>
<data-table-column name="Last Name">
<template>[[item.user.name.last]]</template>
</data-table-column>
<data-table-column name="Email">
<template>[[item.user.email]]</template>
</data-table-column>
</iron-data-table>
</template>
Но когда я меняю источник данных из iron-ajax
вызов внутренней привязки данных {{items}}
, это не работает.
<template is="dom-bind">
<iron-data-table id="items"
selection-enabled
data-source="[[items]]">
<data-table-column name="Comment" width="50px" flex="0">
<template>[[item.comment]]</template>
</data-table-column>
<data-table-column name="Total">
<template>[[item.total]]</template>
</data-table-column>
<data-table-column name="Merchant">
<template>[[item.merchant]]</template>
</data-table-column>
</iron-data-table>
</template>
Я ожидаю, что таблица заполнится данными. Вместо этого отображаются заголовки таблицы и столбца, но данные не заполняют таблицу.
Пара моментов: я использую Firebase для хранения данных. И polymerfire/firebase-query
элемент (в родительском элементе данных показанного элемента), чтобы получить {{items}}
данные.
В каком направлении я должен идти, чтобы попытаться решить эту проблему?
редактировать
Ниже описано, как и что я устанавливаю для items
переменная:
Структура данных внутри моей Firebase выглядит следующим образом.
https://console.firebase.google.com/project/my-app/database/datamy-app
|
- users
|
- userid-123
|
- nodeid-abc
| |- comment: "foo"
| |- merchant: "bar"
| |- date: "2016-07-02"
| |- total: 123
- nodeid-xyx
|- comment: "baz"
|- merchant: "bat"
|- date: "2016-07-15"
|- total: 999
Я загружаю эти данные в свое приложение через Polymerfire firebase-query
элемент в родительском элементе.
<firebase-query
id="query"
app-name="my-app"
path="/users/[[user.uid]]"
data="{{items}}">
</firebase-query>
<items-list id="list"
items="[[items]]"
filters="[[filters]]">
</items-list>
Я знаю {{items}}
данные пробиваются к list-items
элемент, потому что я настроил кнопку для записи данных на консоль.
<button on-tap="show">Show</button>
show: function() {
console.log('items', this.items);
},
Когда я нажимаю кнопку Показать, консоль записывает следующее:
console.logitems
0: Object
$key: "nodeid-abc"
comment: "foo"
merchant: "bar"
date: "2016-07-02"
total: 123
1: Object
$key: "nodeid-xyx"
comment: "baz"
merchant: "bat"
date: "2016-07-15"
total: 999
Интересно, что когда я регистрирую ту же информацию для примера с рабочим кодом:
show: function(){
console.log('users', this.users);
}
Я получил:
console.logusers undefined
Пойди разберись. Очевидно, что-то я не понимаю. Выглядит как {{items}}
привязка данных регистрируется после iron-data-table
рендеринга, и по какой-то причине привязка данных не обновляется в iron-data-table
после того, как он регистрируется в iron-list
элемент.
Edit2
Вот весь dom-module
определение items-list
элемент.
<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="../bower_components/iron-data-table/iron-data-table.html">
<link rel="import" href="../bower_components/iron-data-table/default-styles.html">
<dom-module id="items-list">
<template>
<button on-tap="show">Show</button>
<template is="dom-bind">
<iron-data-table items="[[items]]">
<data-table-column name="Comment">
<template>[[item.comment]]</template>
</data-table-column>
<data-table-column name="Merchant">
<template>[[item.merchant]]</template>
</data-table-column>
</iron-data-table>
</template>
</template>
<script>
(function() {
'use strict';
Polymer({
is: 'items-list',
properties: {
items: {
type: Array,
notify: true,
},
},
show: function() {
console.log('items', this.items);
},
});
})();
</script>
</dom-module>
1 ответ
Вам нужно удалить лишние <template is="dom-bind">
элемент, он инкапсулирует <iron-data-table>
в отдельной обязательной области. dom-bind
не требуется, потому что у вас есть область привязки из dom-module
Я полагаю, вы скопировали dom-bind
элементы из демонстрационных примеров, где они необходимы, потому что нет пользовательского элемента, обернутого вокруг <iron-data-table>
, Вы можете увидеть больше информации об этом здесь: https://www.polymer-project.org/1.0/docs/devguide/templates