Как вложить два элемента Firebase-Collection Polymer в dom-repeat?

У меня проблема с зацикливанием двух элементов Firebase-коллекции Polymers. С моей структурой базы данных я сначала должен проверить, к каким событиям имеет доступ пользователь, а затем получить информацию об этом событии из событий.

Проблема с этим кодом заключается в том, что когда я зацикливаю вторую коллекцию firebase, привязка данных к «событиям» будет одинаковой для всех повторяющихся, и поэтому она будет иметь одно и то же имя для каждого h4.

Итак, есть ли способ иметь уникальную переменную в data="{{ }}". или есть лучший способ записи данных?

<firebase-collection data="{{userData}}" location="{{_getCorrectUrl()}}"></firebase-collection> 
<template is="dom-repeat" items="{{userData}}" as="user">
  <firebase-collection data="{{events}}" location="{{_getCorrectEventsUrl(user.__firebaseKey__)}}" ></firebase-collection> 
  <template is="dom-repeat" items="{{events}}" as="event">
    <h4>{{event.value.name}}</h4>
  </template>
</template>

person Anton Furuholm    schedule 08.06.2015    source источник
comment
Не могли бы вы не загружать пользователя событиями, чтобы вам не приходилось делать второй firebase-collection и можно было просто повторить {{userData.events}}?   -  person Ben Thomas    schedule 08.06.2015
comment
Это решит проблему, но сделает ее медленнее. Я следую рекомендациям Firebase firebase.com/docs/web/guide/ структурирование-data.html   -  person Anton Furuholm    schedule 08.06.2015
comment
у вас получилось решить эту проблему?   -  person Salah Saleh    schedule 17.08.2015
comment
Думаю, я читаю документацию, что вы не можете использовать разрешения в качестве фильтра.   -  person marcus7777    schedule 17.08.2015


Ответы (1)


У меня есть решение, которое я считаю не лучшим способом решить эту проблему, но оно работает для меня. Я создал еще один элемент под названием «мой-пользователь», я выставил атрибут с именем «пользователь», которому присваивается значение «пользователь» из первого dom-repeat. Все работает, однако меня это решение не устраивает. Я все еще ищу решение, которое не требует создания для этого специального элемента.

<firebase-collection data="{{userData}}" location="{{_getCorrectUrl()}}">
</firebase-collection> 
<template is="dom-repeat" items="{{userData}}" as="user">
  <my-user user="[[user]]"></my-user>
</template>

и другой «мой пользователь»:

<dom-module id="my-user">
<template>
  <firebase-collection data="{{events}}" location="{{_getCorrectEventsUrl(user)}}" ></firebase-collection> 
  <template is="dom-repeat" items="{{events}}" as="event">
    <h4>{{event.value.name}}</h4>
  </template>
</template>
<script>
    (function () {
  Polymer({
    is: 'my-user',
    _getCorrectEventsUrl: function(obj) {
      return 'https://app.firebaseio.com/users/' + obj.__firebaseKey__;
    },
    properties: {
      user:{
        type:Object,
      },
    },

  });
})();
</script>
</dom-module>

ИЗМЕНИТЬ

Теперь, после некоторого ответа на этот вопрос, я понял, что когда кто-то сталкивается с такой ситуацией с базой данных NoSQL, это обычно указывает на проблему в дизайне. Данные должны быть денормализованы, и следует избегать объединения, как это обычно делается в базах данных SQL. Посмотрите базу данных Firebase для разработчиков SQL на ютубе.

person Salah Saleh    schedule 17.08.2015
comment
Вы нашли лучшее решение, чем это? или все еще используя то же решение с другим пользовательским элементом. - person Srikanth; 22.01.2016
comment
@Srikanth да, посмотрите это: youtube.com/ вам в основном нужно для редизайна вашего приложения. - person Salah Saleh; 23.01.2016