Как смешать результат нескольких источников данных JSON в AMP? - PullRequest
0 голосов
/ 29 мая 2018

Я выводлю список ссылок, в которых мне нужно смешать значения в шаблоне, поступающие не из одного, а из двух отдельных источников данных JSON.

Псевдоразметка:

<a href="{link1}/{link2}">{title1}</a>

В приведенном выше примере link1 и title1 будут исходить из JSON # 1, а link2 - из JSON # 2.

Для ясности: я знаю, что этой проблемы можно полностью избежать, объединив источники данных JSON в один сервис, но в моем сценарии это невозможно, причины не имеют значения.

Более подробно об общей идее, приведенной выше псевдоразметке, которую я обертываю в список усилителей:

<amp-list id="mylist" width="auto" height="160px" layout="fixed-height" src="//json1">
    <template type="amp-mustache">
        <a href="{{buyURL}}={{UID}}">
           <amp-img src="{{logoURL}}" width="{{logoWidth}}" height="{{logoHeight}}" layout="fixed" alt="{{name}}">
            </amp-img>
         </a>
    </template>
</amp-list>

Я удалил атрибуты, не относящиеся к данному вопросу.В приведенном выше коде все переменные происходят из json1, за исключением {{UID}} .Это нужно из отдельной службы json, на данный момент давайте назовем ее json2.

Поэтому моя задача состоит в том, чтобы интегрировать значение, поступающее из 2-го источника данных, и смешать его с выходом шаблона, связанным с первыми данными.источник.Вот что я попробовал:

  • Вложение шаблонов друг в друга не представляется возможным, оно выдает ошибку AMP
  • Вложения в списки разрешены, но вы можете поместить шаблон только виерархия правильного списка.Если поместить их на одном уровне, AMP просто выберет первый или выдаст ошибку «шаблон не найден».

Я застрял в реализации описанного выше сценария.Я не знаю, как подойти к нему или где это вообще возможно.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Самостоятельно отвечая на мой вопрос.Обратите внимание, что этот ответ чрезвычайно вдохновлен другим ответом Себастьяна Бенца, но с некоторыми небольшими изменениями.

<amp-state id="requestID">
  <script type="application/json">
    {
    "unid": "123654"
    }
  </script>
 </amp-state>

 <amp-list id="mylist" width="auto" height="160px" src="//.." items="..">
    <template type="amp-mustache">
       <a href="" [href]="'{{URL}}&id=' + requestID.unid">{{name}}</a>
    </template>
 </amp-list>

В приведенном выше примере {{URL}} и {{name}} взяты из усилителя.Перечислите источник JSON, а requestID.unid поступает из второго источника JSON.Синтаксис показывает, как объединить оба источника данных в один атрибут: href.Ключевые отличия от другого ответа:

  • href должен быть пустым, а не назначенным {{URL}}
  • выражение в [href] не должно присваивать переменную, оно должно оцениватьвместо этого возвращаемое значение
0 голосов
/ 30 мая 2018

Вы можете попробовать объединить состояние усилителя и список усилителей:

<amp-state id=json2 src=json2></amp-state>

<amp-list id="mylist" width="auto" height="160px" layout="fixed-height" src="//json1">
    <template type="amp-mustache">
        <a href="{{buyURL}}" [href]="'{{buyUrl}}=' + json2.uuids['{{name}}']" >
           <amp-img src="{{logoURL}}" width="{{logoWidth}}" height="{{logoHeight}}" layout="fixed" alt="{{name}}">
            </amp-img>
         </a>
    </template>
</amp-list>

В настоящее время список усилителей оценивает привязки при отображении его содержимого.Однако это поведение в настоящее время обсуждается и может измениться (при правильном обходном пути).

Вот пример, демонстрирующий подход: https://amp -demos.glitch.me / two-json.html.

...