Acaba de entrar en javascript y knockout.js. He encontrado un montón de ejemplos de lo que estoy tratando de lograr. Y me siento como que hay un pequeño error de sintaxis me puede estar pasando por alto. Estoy tratando de filtrar un conjunto ya ha regresado (este.tareas) desde un servidor a través de ajax/json. Tengo que trabajar bien. Lo que me gustaría hacer, es tener a los usuarios ser capaz de cambiar entre una completa y tareas incompletas.

He cambiado el código para que se ejecute el bucle foreach en tasksFiltered. «este.»es verdadero o falso.

Plantilla de la tarea

var taskModel = function(id, title, description, done){
    var self = this;
    this.id = ko.observable(id);
    this.title = ko.observable(title);
    this.description = ko.observable(description);
    this.done = ko.observable(done);

    this.showEdit = ko.observable(false);
    this.titleUpdate = ko.observable(false);
    this.descriptionUpdate = ko.observable(false);
};

Modelo De Página

var pageModelTasks = function(){
    var self = this;
    this.task_title = ko.observable("");
    this.task_description = ko.observable("");
        this.task_title_focus = ko.observable(true);
    this.tasks = ko.observableArray([]);

    this.tasksFiltered = ko.computed(function() {
        return ko.utils.arrayFilter(this.tasks, function(Task) {
        return Task.done == true;
      });
    });

   //CRUD functions excluded 
}; 

esto no funciona.

OriginalEl autor aibarra | 2013-11-13

3 Comentarios

  1. 10

    Dos correcciones menores a su código. En primer lugar, como @XGreen mencionado, debe pasar el valor de matriz, no la observableArray instancia, como el primer parámetro de la arrayFilter función. Por último, porque Task.done es observable, necesario para invocar a los miembros para obtener el valor. Aquí está el código modificado:

    this.tasksFiltered = ko.computed(function() {
        return ko.utils.arrayFilter(this.tasks(), function(Task) {
            return Task.done() === true;
        });
    });
    Encantado de ayudar 🙂
    Te falta el «este» de arg en la calculada, o el uso de «auto.tareas()» en lugar de «esto.tareas()»

    OriginalEl autor Vinney Kelly

  2. 1

    La segunda solución tiene un problema con el método ko.utils.stringStartsWith.

    ko.utils.stringStartsWith que faltan en el archivo de la versión.

    Puede utilizar este código:

      var stringStartsWith = function (string, startsWith) {          
            string = string || "";
            if (startsWith.length > string.length)
                return false;
            return string.substring(0, startsWith.length) === startsWith;
        };

    Ver Tema Enlace

    OriginalEl autor Ivan Rodriguez

  3. 0

    Puede ayudar

    if (myList().length > 0) {
        var text= this.filter().toLowerCase();
        return ko.utils.arrayFilter(myList(), function (item) {
                    if (item.Label.toLowerCase().indexOf(text) > -1 || item.Desc.toLowerCase().indexOf(text) > -1) {
                        return true;
                     }
                     else {
                         return false;
                     }
              });
    }
    mostrar donde esta.filtro está definido en el cartel original del código

    OriginalEl autor Anil Singh

Dejar respuesta

Please enter your comment!
Please enter your name here