Avatar billede pegasus72 Nybegynder
29. juli 2005 - 13:25 Der er 8 kommentarer og
1 løsning

Søge i Array uden at være strict søgning? EKSTRA

Ok drenge! Tak for sidst..
Har et DataSet, (Array).. I dette vil jeg gerne bruge førnævnte søgefunktion i forbindelse med et tekstfelt der søger igennem ved hver enkelt indtastning af bogstaverne, "instant search" og filtrere f.eks navne fra der ikke møder kriteriet.

Har jeres smukke funktion men her er det så:

Dataset har to metoder: .filtered og .filterFunc..

Usage
dataSet.filtered

Description Property;

a Boolean value that indicates whether the data in the current iterator is filtered. The default value is false.When this property is true, the filter function specified by DataSet.filterFunc is called for each item in the

Usage
dataSet.filterFunc = function(item:Object) {// return true|false;};

DescriptionProperty;

specifies a function that determines which items are included in the current view of the collection. When DataSet.filtered is set to true, the function assigned to this property is called for each record (transfer object) in the collection. For each item that is passed to the function, it should return true if the item should be included in the current view, or false if the item should not be included in the current view.When changing the filter function on a data set, you must set the filtered property to false and then true again in order for the proper modelChanged event to be generated. Changing the filterFunc property won’t generate the event.Also, if a filter is already in place when the data loads in (modelChanged or updateAll), the filter isn’t applied until filtered is set to false and then back to true again.

Eksempel:

employee_ds.filtered = true;
employee_ds.filterFunc = function(item:Object) {// filter out employees who are managers...
return(item.empType != "management");
}

Kan det lade sig gøre at flette søge funktionen ind i .filterFunc så jeg derved har et "instant search" felt der hamrer igennem den kolonne jeg specificerer?
Avatar billede barklund Nybegynder
29. juli 2005 - 14:46 #1
Selvfølgelig:

function compareObjectAsStringToValue(o:Object):Boolean {
  var s:String = String(o);
  return s.toLowerCase().indexOf(arguments.callee.$_compare_value;
}
compareObjectAsStringToValue.$_compare_value = '';
dataSet.filterFunc = compareObjectAsStringToValue;

Og så når du skal sortere datasettet:

compareObjectAsStringToValue.$_compare_value = mit_input_felt.text;
dataSet.filterFunc = compareObjectAsStringToValue;

Jeg ved ikke lige, om der findes en filter, som aktiverer filtreringsfunktionen - men ellers kan du bare sætte funktionen igen som ovenfor.

--
Morten Barklund
Avatar billede pegasus72 Nybegynder
29. juli 2005 - 15:56 #2
return s.toLowerCase().indexOf(arguments.callee.$_compare_value;

Der er noget galt, kan se at der mangler en slutparantes men returnerer fejl:

"The expression returned must match the function's return type."
Avatar billede pegasus72 Nybegynder
29. juli 2005 - 15:57 #3
Gider du at forklare hver linje, så jeg også lærer noget?
Avatar billede pegasus72 Nybegynder
29. juli 2005 - 15:58 #4
Mht. aktivering, så sættes dataSet.filtered til false; og så tilbage til true;
Avatar billede pegasus72 Nybegynder
29. juli 2005 - 16:47 #5
Her er den endelige løsning, hvis der er andre der kunne tænke sig et "instant Search" textFelt:

listenerObject = new Object();
listenerObject.change = function(){
    dataSet.filtered = false;
    dataSet.filtered = true;
    dataSet.filterFunc = function(item:Object) {
    var searchString:String = input_text.text.toLowerCase();
    if (item.kolonne.toLowerCase().indexOf(searchString) != -1) {
        return true;
    }
    return false;
}
    }
input_text.addEventListener("change", listenerObject);

Tak for input der førte til svaret...

--> Barklund, Svar tak!
Avatar billede barklund Nybegynder
29. juli 2005 - 16:53 #6
Jeg beautifier det lige lidt:

function filter(item:Object):Boolean {
    var searchString:String = input_text.text.toLowerCase();
    return (item.kolonne.toLowerCase().indexOf(searchString) != -1);
}
dataSet.filterFunc = filter;
listenerObject:Object = new Object();
function onChange():Void {
    dataSet.filtered = false;
    dataSet.filtered = true;
}
listenerObject.change = onChange;
input_text.addEventListener("change", listenerObject);

Såååledes :)

--
Morten Barklund
Avatar billede barklund Nybegynder
29. juli 2005 - 16:53 #7
Og et svar :)
Avatar billede pegasus72 Nybegynder
29. juli 2005 - 16:54 #8
Tak skal du bim!
Avatar billede barklund Nybegynder
29. juli 2005 - 21:55 #9
Finno ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester