Ho problemi a combinare l'associazione foreach con un ordinamento. Ho una lista legata in questo modo:Knockout - Utilizzo di foreach e ordinamento insieme
<article data-bind="foreach: widgets">
Widgets è un semplice array obvservable:
var widgets= ko.observableArray();
Questo funziona bene dandomi una lista dei miei "widget". Se aggiungo un nuovo "widget" a questa lista, viene visualizzato dinamicamente nell'elenco tramite associazione dati.
Tuttavia, non appena ho aggiungere l'ordinamento alla matrice:
<article data-bind="foreach: widgets.sort(function (left, right) { return left.order() == right.order() ? 0 : (left.order() < right.order() ? -1 : 1); })">
Poi di recente aggiunti i widget non appaiono più nella mia lista - a meno che non ricaricare la pagina. (L'ordinamento funziona bene a questo punto - se aggiorno il campo "ordine" su cui mi sto occupando, gli articoli nel mio elenco vengono riordinati dinamicamente).
Come posso ottenere che l'ordinamento suoni bene con l'aggiornamento dinamico di nuovi elementi nel mio array osservabile?
Sto utilizzando Breezejs per recuperare i miei dati, tuttavia non penso che questo abbia un impatto su questo scenario.
Thank- voi - che ha lavorato bene. Puoi aggiornare la tua risposta per includere "function()" all'inizio di ko.computed (all'interno delle prime parentesi). Lo accetterò quindi come risposta. – daveywc
In seguito alla tua risposta sopra, come faccio a fare in modo che funzioni per un foreach annidato, ad esempio un foreach su una proprietà di navigazione di uno dei widget nella mia lista di primo livello. In questo caso non dichiaro esplicitamente l'array osservabile a cui sono vincolato, quindi non vedo come utilizzare questo approccio. – daveywc
Ho corretto l'errore nella mia risposta. Non ho familiarità con Breezejs ma penso che possa essere configurato per creare queste proprietà personalizzate per te. In ogni caso, JS è dinamico, quindi puoi aggiungere nuove proprietà a qualsiasi oggetto già esistente. – nemesv