tutorial ember data all ember.js ember-data ember-cli

ember.js - data - ¿Cómo se logra la clasificación en un modelo Ember sin usar el Controlador de matriz?



ember nested routes (4)

En situaciones como esa, uso Ember.ArrayProxy con Ember.SortableMixin directamente.

Un ArrayProxy envuelve cualquier otro objeto que implemente Ember.Array y / o Ember.MutableArray, reenviando todas las solicitudes. Esto lo hace muy útil para varios casos de uso vinculante u otros casos en los que es útil poder intercambiar la matriz subyacente.

Entonces, por ejemplo, puedo tener una propiedad de controlador como tal:

sortedItems: function(){ var items = Ember.ArrayProxy.extend(Ember.SortableMixin).create({content: this.get(''someCollection'')}); items.set(''sortProperties'', [''propNameToSortOn'']); return items; }.property()

Como que sí: JSBin

Cada resultado de Google es sobre una ordenación ArrayController. Necesita un mecanismo de clasificación sin usar ArrayController.

Hay un modelo donde hay sort params. Como decir ''sortOrder'' como una de las propiedades en el modelo (que será de un back-end).

Hará que este modelo use #each, pero esto debería hacer la iteración basada en la propiedad sortOrder y no en la propiedad de ID del modelo.


Solo necesita incluir una SortableMixin en el controlador o componente y luego especificar la propiedad sortAscending y sortProperties .

Em.Controller.extend(Em.SortableMixin, { sortAscending: true, sortProperties: [''val''] });

Aquí hay una demostración funcional.


Así es como clasifico manualmente (usando comparación de brasas)

import Ember from "ember"; import { attr, Model } from "ember-cli-simple-store/model"; var compare = Ember.compare, get = Ember.get; var Foo = Model.extend({ orderedThings: function() { var things = this.get("things"); return things.toArray().sort(function(a, b) { return compare(get(a, "something"), get(b, "something")); }); }.property("[email protected]") });


En Ember 2.0 SortableMixin está en desuso y está a punto de desaparecer también.

En el Controller (no en el ArrayController ) puede definir una nueva propiedad calculada como SortedUsers1,2,3 continuación:

export default Ember.Controller.extend({ sortProps: [''lastName''], sortedUsers1: Ember.computed.sort(''model'', ''sortProps''), sortedUsers2: Ember.computed.sort(''content'', ''sortProps''), sortedUsers3: Ember.computed(''content'', function(){ return this.get(''content'').sortBy(''lastName''); }) });

La suposición anterior es que el modelo en sí es una matriz de usuarios con lastName como una de las propiedades del usuario. La dependencia de ''model'' y ''content'' parece equivalente a mí. Las tres propiedades calculadas arriba producen la misma lista ordenada.

Tenga en cuenta que no puede reemplazar ''sortProps'' argumento ''sortProps'' con ''lastName'' en sortedUsers1,2 ; no funcionará.

Para cambiar el orden de clasificación, modifique sortProps para

sortProps: [''lastName:desc'']

Además, si su plantilla está en la carpeta de usuarios / índice, entonces su controlador debe estar allí también. El controlador en usuarios / no funcionaría, incluso si el modelo de carga de ruta está en usuarios /.

En la plantilla, el uso es el esperado:

<ul> {{#each sortedUsers1 as |user|}} <li>{{user.lastName}}</li> {{/each}} </ul>