Funcții utilitare Knockout – ko.utils.arrayFilter – data binding (Programare, Javascript, Knockout.Js)

d_wesseling a intrebat.

Am găsit acest tutorial pentru un utilitar knockout care filtrează o matrice și creează o nouă versiune filtrată a matricei.http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

De acolo, înțeleg că this.filter din „this.filter().toLowerCase();” este ko.observable legat de caseta de intrare din vizualizare.

Am încercat să integrez acest lucru în codul meu. Sunt conștient că am nevoie de mai multe modificări. Metoda „ko.utils.stringStartsWith” nu mai este suportată

Primesc eroarea „Uncaught TypeError: this.kofilter is not a function „Nu sunt sigur ce înseamnă acest lucru, este ceva în neregulă cu legarea datelor?

Acesta este codul meu JS

this.filteredItems = ko.computed(function() {

console.log(this)

var filter = this.kofilter().toLowerCase();

   if (!filter) { 
    return self.venueList(); 
         } else { 
                  return ko.utils.arrayFilter(this.venueList(), function(venues) {
          return ko.utils.stringStartsWith(venues.name().toLowerCase(), filter) ;
      });
  }
}, this.venueList);



};

Și acesta este codul HTML

       <br><input placeholder = "Search..." data-bind="value: kofilter, valueUpdate: 'afterkeydown'">

Comentarii

  • Postați linia în care creați kofilter. Și indentează-ți codul corect, este imposibil de citit. –  > Por Matti Virkkunen.
  • Am găsit problema, îmi lipsea self.kofilter = ko.observable(”); –  > Por d_wesseling.
2 răspunsuri
Matti Virkkunen

Sunt dispus să pariez că este din nou o problemă cu this. De exemplu, nu cred că vrei să treci this.venueList la calculat ca obiect de context, ci mai degrabă doar this.

Dacă aveți un self variabilă, păstrați-o și nu folosiți this. În caz contrar, asigurați-vă că treceți codul corect this la toate apelurile de funcții.

d_wesseling

Am găsit problema, îmi lipsea self.kofilter = ko.observable(”);