Как использовать глубокие записи для выбора DS-списков
У меня проблема с выбором списков DS в моей полимерной заявке. У меня есть действующий список заголовков чата (реализованный как глубокие записи), который должен использоваться для выбора соответствующих историй чата (которые реализованы в виде подробного списка, содержащего сообщения чата в виде записей).
<div class="chatlist">
<!-- This is the list of chats -->
<paper-menu selected="[[chatlist]]">
<paper-item>
<paper-input label="New Chat:" id="chatName" on-keydown="setChatName"></paper-input>
</paper-item>
<template
is="dom-repeat"
items="[[todos]]"
as="recordId">
<div role="listbox">
<chat-names
name="[[recordId]]">
</chat-names>
</div>
</template>
</paper-menu>
</div>
<!-- this is the chat history -->
<iron-pages
selected="[[chatlist]]"
attr-for-selected="chatView"
fallback-selection="chatView404"
role="main">
<template
is="dom-repeat"
items="[[todos]]"
as="recordId">
<chat-view
chatView="[[???]]"
name="[[recordId]]">
</chat-view>
</template>
</iron-pages>
Итак, вот моя проблема: хотя список чатов работает нормально, я не знаю, как связать выбор самого чата с отображением соответствующей истории чата.
Создание заголовка чата происходит на бумаге on-keydown="setChatName"
функция, которая выглядит так:
setChatName: function (e) {
if (e.which === 13) {
var recordId = 'polymer-example/' + this.ds.getUid();
var todo = this.$$( '.new-record-input' ).value;
var todoRecord = this.ds.record.getRecord( recordId );
var todoList = this.ds.record.getList( this.name );
todoRecord.set( { name: todo, checked: false } )
todoRecord.whenReady( function() {
todoList.addEntry( recordId );
} );
this.$.chatName.value = '';
}
},
Как теперь я могу установить не только запись самого имени чата, но и список ds, содержащий историю чата? И: Какие атрибуты списка ds полезны (например, id? Name?) Для использования в качестве атрибута для его выбора?
Извините за длинный вопрос, каждый ответ очень ценится!
1 ответ
Во-первых, прости меня, но я смущен примерами, которые ты привел. Второй фрагмент кода выглядит как пример кода для приложения todo. Это очень помогло бы, если бы вы использовали описательные имена переменных.
Похоже, у вас есть код, который позволяет пользователю создать новое имя чата, где создается запись под названием 'polymer-example/$RANDOM_ID'
(Я бы предложил использовать что-то вроде 'chat-details/$RANDOM_ID'
вместо) со значением { name: $CHAT_NAME, checked: false }
, Запись 'polymer-example/$RANDOM_ID'
затем добавляется в список с некоторым свойством полимера. У вас есть глубокий список имен, где каждое имя соответствует глубокой записи, содержащей имя чата.
Предположим, что вы хотите сохранить ссылку на текущий выбранный чат, я предлагаю либо сохранить соответствующий идентификатор чата (это называется recordId
в приведенном примере) в качестве свойства, или вместо этого вы можете сохранить ссылку на саму запись.
Для хранения истории чата я бы предложил создать еще один список (например, например, 'chat-history/$CHAT_ID'
) для каждого чата. Затем для каждого нового сообщения вы можете создать соответствующую запись ('chat-message/$RANDOM_ID'
) и использовать его для хранения содержимого сообщения, имени отправителя, времени и т. д. Теперь добавьте имя записи сообщения в список истории чата.
Выбор правильной истории чата - это всего лишь случай получения текущего выбранного чата (chatId
), получая список 'chat-history/' + chatId
который содержит список идентификаторов сообщений, а затем выборку записи 'chat-message/' + messageId
,