Mam problem z łączeniem wiązania foreach z sortowaniem. Mam listę związany tak:Knockout - Używanie foreach i sortowanie razem
<article data-bind="foreach: widgets">
widżetów jest prosta obvservable tablicy:
var widgets= ko.observableArray();
to działa ładnie dając mi listę moich „widżety”. Jeśli dodaję nowy "widget" do tej listy, to pojawi się ona dynamicznie na liście poprzez powiązanie danych.
jednak tak szybko, jak dodać do sortowania tablicy:
<article data-bind="foreach: widgets.sort(function (left, right) { return left.order() == right.order() ? 0 : (left.order() < right.order() ? -1 : 1); })">
Następnie nowo dodane widżety nie pojawiają się na mojej liście - chyba że odświeżyć stronę. (Sortowanie ładnie działa w tym momencie - jeśli zaktualizuję pole "zamówienie", które sortuję, to pozycje na mojej liście są dynamicznie sortowane ponownie).
W jaki sposób mogę uzyskać ładowanie dobrej sortowania z dynamiczną aktualizacją nowych elementów w mojej tablicy obserwowalnej?
Używam Breezejs do pobierania moich danych, ale nie sądzę, że ma to wpływ na ten scenariusz.
Thank- ciebie - który pracował ładnie. Czy możesz zaktualizować swoją odpowiedź, dodając "function()" na początku ko.computed (w pierwszych nawiasach). Przyjmuję to jako odpowiedź. – daveywc
W związku z powyższą odpowiedzią, w jaki sposób mogę to zrobić dla zagnieżdżonego foreach, tj. Foreach dla właściwości nawigacji jednego z widgetów na mojej liście najwyższego poziomu. W tym przypadku nie deklaruję jawnie tablicy obserwowalnej, do której się zobowiązuję, więc nie widzę sposobu użycia tego podejścia. – daveywc
Naprawiłem błąd w mojej odpowiedzi. Nie znam Breezejsa, ale myślę, że można go skonfigurować tak, by tworzył dla ciebie te niestandardowe posortowane właściwości. W każdym razie JS jest dynamiczny, więc możesz dodawać nowe właściwości do dowolnego istniejącego obiektu. – nemesv