marvi 0 Denunciar post Postado Junho 16, 2007 Ola pessoal, tenho um busca que ele não é preciso, se tem uma palavra no meu banco xml "macromedia" e eu digito no busca a letra "m" e o certo era chamar macromedia, ja que macromedia é uma palavra que tem a letra m, entende? mas a palavra macromedia só aparece se eu digitar o nome completo "macromedia" no meu busca de flash. Então pensei que o indexOf poderia resolver isso, pode? tenho essa linha: else if(ndRoot.childNodes.childNodes[j].nodeName == "keywords") onde esse keywords são as palavras chaves do meu busca no banco em xml, será que é aí que vou colocar algum comando para que meu busca fique mais preciso e com só letras digitadas chame as palavras completas no meu busca? Obrigado! Preciso! Marcelo Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Junho 16, 2007 Primeiro vamos ver um exemplo: var palavra_digitada = "media";var palavras:Array = Array("macromedia", "adobe", "webmedia");for (i in palavras) { if (palavras[i].indexOf(palavra_digitada) != -1) { trace(palavras[i]); }}Agora, fazendo um paralelo com a sua aplicação:[*]A primeira variável é que vem do inputText. Nesse caso eu já digitei no AS, mas na sua aplicação ela virá normalmente. [*]A segunda variável representa o seu XML, as palavras-chave. [*]O loop ForIn representa o loop que você já está fazendo para testar cada palavra chave. [*]O if seria esse if que você escreveu aí na pergunta (na verdade um else if). É só verificar se nas palavras-chave contém a palavra digitada. Quando usa o indexOf e não acha nada, ele retorna -1. Então, se o resultado do indexOf for diferente de -1 quer dizer que a palavra existe, aí você faz o que quiser. Qualquer dúvida fala aí. Abraço Compartilhar este post Link para o post Compartilhar em outros sites
marvi 0 Denunciar post Postado Junho 16, 2007 Ola Antoniosp, acredito que entendir mas vou colocar aqui na minha realidade... voce falou que a primeira variavel recebe valores do campo inputText onde o usuario digita as palavras para buscar ok? No meu caso está assim: dbXML.load("database.xml");Selection.setFocus("word");O nome word é o nome da minha variavel que é meu inputtext, nesse caso fiz um campo inputtext e na propriedade do meu flash 8 coloquei no campo var: word, então ele ta sendo uma variavel... aí voce me mostrou esse exemplo: if (palavras.indexOf(palavra_digitada) != -1) e se "palavra_digitada" é uma variavel eu deveria fazer isso com meu codigo então if (palavras.indexOf(word) != -1) seria isso? Aí vem as dúvidas, mas aí minhas palavras chaves estão aqui assim: else if(ndRoot.childNodes.childNodes[j].nodeName == "keywords") e esse keywords é a area onde esta as palavras chaves do meu XML entendeu? Aí eu fiquei sem logica para colcoar esse indexOf, ja que nos testes que fiz aqui só retorna vazio minhas buscas... para ficar bem claro como esta meu esquema vou te mostrar abaixo o meu action script, como ele começou e tal e meu xml No fim do codigo comentei algumas coisas.... action script stop(); fscommand("allowscale", "false");var dbArray = new Array();var dbXML = new XML();dbXML.onLoad = function() { var title, description ou descrição, link, keywords; var ndRoot = this.firstChild; for(var i = 0; i < ndRoot.childNodes.length; i++) { if(ndRoot.childNodes[i].nodeName != null) { title = ndRoot.childNodes[i].attributes.title; description = ndRoot.childNodes[i].attributes.description; for(var j = 0; j < ndRoot.childNodes[i].childNodes.length; j++) { if(ndRoot.childNodes[i].childNodes[j].nodeName == "link") { link = ndRoot.childNodes[i].childNodes[j].firstChild.nodeValue; } // TAVA TENTANDO COLOCAR AQUI O INDEXOF else if(ndRoot.childNodes[i].childNodes[j].nodeName == "keywords") { keywords = ndRoot.childNodes[i].childNodes[j].firstChild.nodeValue.split("|"); } } dbArray.push(new _root.record(title, description, keywords, link)); } }}function record(title, description, keywords, link) { this.title = title this.description = description; this.keywords = keywords; this.link = link;}function search(string) { var nResults = 0; for(var i = 0; i < dbArray.length; i++) { // OU AQUI COLOCO INDEXOF? for(j = 0; j < dbArray[i].keywords.length; j++) { // SERA AQUI QUE POSSO COLCOAR MEU INDEXOF? if (dbArray[i].keywords[j].toLowerCase() == string) { found = true; nResults++; break; } } if(found) { results += "<b><a href=\""+ dbArray[i].link + "\"><u>" + dbArray[i].title + "</u></a></b>" + "<br>"; results += dbArray[i].description + "<br><br>"; found = false; } } if(nResults == 0) { // mostra se não ha resultados results = "<b>Não ha resultados...</b>"; } gotoAndStop(10);}// Aqui carrego meu xmldbXML.load("database.xml");Selection.setFocus("word"); Meu xml é <database> <record title="Flash 5" description="Criando em flash."> <link>http://www.macromedia.com/software/flash</link> <keywords>Macromedia|Flash|SWF|XML|Shockwave|ActionScript|ActionScripting</keywords> </record> Obrigado Marcelo Compartilhar este post Link para o post Compartilhar em outros sites
marvi 0 Denunciar post Postado Junho 17, 2007 Ola, Eu continuei funçando aqui, estudando o codigo e fiz assim, de acordo com o AS acima, veja se esta no caminho certo: else if (keywords.childNodes[j].indexOf(digite) != -1) dbXML.load("database.xml"); Selection.setFocus("word"); var digite = Selection.setFocus("word"); Entendeu? Mas ele sempre retorna o busca vazio, da erro nenhum mas retorna vazio tudo que digito, alguma dica? Obrigado! Preciso! Marcelo Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Junho 18, 2007 É isso aí Marcelo, estamos indo bem! É para colocar lá no "// SERA AQUI QUE POSSO COLCOAR MEU INDEXOF?", hehe. Tem que trocar o: if (dbArray[i].keywords[j].toLowerCase() == string) {Por: if (dbArray[i].keywords[j].toLowerCase().indexOf(string.toLowerCase()) != -1) {O .toLowerCase() é apenas para colocar todas as letras em minúsculo, assim ele vai achar tanto MacroMedia quando macromedia, por exemplo. ;) Abraço Compartilhar este post Link para o post Compartilhar em outros sites
marvi 0 Denunciar post Postado Junho 18, 2007 Oi!É realmente funciounou!Mas quero aprender mais...não quero parar só porque rodou! Tipo como eu sei que era nessa linha que coloco o indexOf? E eu funçando aqui descobrir isso: searchString.indexOf qual a diferença do searchString.indexOf com String.indexOf, esse search seria mais apropriado? Apesar que funcionou bem o codigo agora!Você sabe onde consigo um livro, artigo ou material para estudar action script ate chegar nesse nivel de indexOf e etc? Tenho interesse de conhecer mais!Obrigado!!!!!!Marcelo Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Junho 19, 2007 E aí Marcelo! Na verdade searchString e String são apenas nomes diferentes para a mesma coisa: o texto onde a palavra tem que ser buscada. E sobre livros.. tem vários por aí, mas geralmente ensinam o básico, ou só dão fórmulas prontas. Tem umas coleções no http://www.tishop.com.br que acredito que sejam boas. Mas o que vai fazer você aprender bastante é justamente criar. Outra coisa é chegar no F1 do Flash, escolher uma classe qualquer (começe pelas mais genéricas, tipo Number, String) e observar todos os seus métodos e propriedades e, a partir daí, pensar em algo útil para se fazer com esse material. Bons estudos, Abraço Compartilhar este post Link para o post Compartilhar em outros sites
marvi 0 Denunciar post Postado Junho 20, 2007 Valeu! obrigado! Sou colocar em pratico eu estou colocando...mas a questão é que a gente sem fontes de informações fica dificil continuar, a ideia do F1 foi boa!E para colocar um menu suspenso para chamar area e sub-area do meu busca, é dificil? para que exibia no mesmo campo onde ja sai o resultado do busca? Pois tenho um menu suspenso que ele exibi os dados de um componente imputtext e o resultado do meu busca é de um text dinamico...entende? e esse menu suspenso só trabalha com compenentes, tem como interagir ou você conhece um sistema legal de menu suspenso?Obrigado mesmo!Marcelo Compartilhar este post Link para o post Compartilhar em outros sites