Результаты Aurelia получают результат

Я хотел бы получить результат вычисления значения, который фильтрует массив в моем представлении, чтобы отобразить количество найденных результатов.

  <div repeat.for="d of documents|docfilter:query:categories">
    <doc-template d.bind="d"></doc-template>
  </div>

Я не хочу, чтобы эта логика была перенесена на мой контроллер (чтобы сохранить его в чистоте) и не добавлять костыли, например, возвращать некоторые данные из контроллера значений.

Что я хочу:

Итак, в основном мне хотелось бы что-то вроде angular: Как показано здесь: ng-repeat="item in filteredItems = (items | filter:keyword)" или здесь: ng-repeat="item in items | filter:keyword as filteredItems"

Что я получаю:

К сожалению, в Aurelia:

d of filteredDocuments = documents|docfilter:query:categories

на самом деле означает d of filterDocuments = документы |docfilter:query:categories, и если я добавлю скобки или as, он не будет работать (сбой с ошибкой парсера).

Итак,

Есть ли чистый способ получения данных из фильтра данных в представлении?

С наилучшими пожеланиями, Александр


UPD 1: когда я говорил о возврате некоторых данных из контроллера значений, я имел в виду это:

export class DocfilterValueConverter {
  toView(docs, query, categories, objectToPassCount) {
    ...
    objectToPassCount.count = result.length;
    ...
  });
});

UPD 2. На самом деле я ошибся в этом: d of filterDocuments = документы |docfilter:query:categories. Это не решает проблему, но что делает этот код:

1) filteredDocuments = documents |docfilter:query:categories в init 2) d of filteredDocuments, который является повторением по фильтру в самом начале массива

Ответ 1

Предполагая, что у вас есть внешний элемент, вы можете набивать отфильтрованные элементы в ad-hoc-свойство, подобное этому:

<!-- assign the filtered items to the div "items" property: -->
<div ref="myDiv" items.bind="documents | docfilter : query : categories">

  <!-- use the filtered items:  -->
  <div repeat.for="d of myDiv.items">
    <doc-template d.bind="d"></doc-template>
  </div>

</div>

Я знаю, что это не совсем то, что вы ищете, но оно будет выполнять эту работу. Я изучаю, было ли полезно добавить команду привязки let - примерно так: <div let.foo="some binding expression">

Изменить

Здесь немного лучше: https://gist.run/?id=1847b233d0bfa14e0c6c4df1d7952597

<template>
  <ul with.bind="myArray | filter">
    <li repeat.for="item of $this">${item}</li>
  </ul>
</template>