rozmawiałem z Scott Miles, członek zespołu za polimeru i mam ten powrotem:
Aby nieruchomości komputerowej prawidłowo wiązać należy użyć [[double(values.*)]]
.
Parametr przekazany do funkcji double
będzie obiektem o właściwościach path
, value
i base
, podobnie jak w obserwacji ścieżki.
path
skieruje na ciąg ścieżki, która określa, czy length
lub splices
została zaktualizowana w tablicy,
value
będzie wartość length
lub splices
i
base
skieruje do swojej tablicy.
Przykład:
<template is="dom-repeat" items="[[double(values.*)]]">
<span>[[item]]</span>
</template>
<script>
...
double: function(e) {
return e.base.map(function(n) { return n*2; });
}
Docs: https://www.polymer-project.org/1.0/docs/devguide/properties.html#array-observation
Demo: http://plnkr.co/edit/Idrz5XvLn9SZ35iR8pGT?p=preview
dom-repeat
szablon oczekuje się pracować z kolekcją, a więc kiedy powiązać go values
bezpośrednio wie, że musi mieć zakładki na elementach w values
.
Obliczone właściwości nie mają żadnych takich oczekiwań, a więc [[double(values)]]
nie działa w tym przypadku, ponieważ będzie aktualizować tylko wtedy, gdy sama wzmianka values
zmienia, nie gdy rzeczy w zmianie tablicy. Korzystanie z values.*
pozwala Polymerowi wiedzieć, że powinien zaktualizować wiązanie właściwości obliczeniowych, gdy zawartość tablicy jest zmutowana.
nie będę pisać tego tutaj w zastępstwie Scotta gdyby nie
sjmiles: @vartan: OTOH, jeśli można rozpisać czego nauczyłeś się, że to mi pomoże, czas jest moim najmniej elastyczny zasób
Zauważ również, że funkcja obliczonej właściwości nie przekazuje bezpośrednio tablicy, ale jako właściwość o nazwie 'base'. Więc 'function (values) {...}' staje się 'function (info) {var values = info.base; ...} ' –
@ TrevorDixon Goodness, zapomniałem o tym wspomnieć! Wielkie okrzyki. Dodałem wszystkie dodatkowe szczegóły :) Dzięki za uwagę! –