2009 07 de marzo de 2009

Chamando múltiples funcións onload de Windows en Javascript

Heres outro anaco pouco de malandragem Javascript que eu tiven que cavar ao redor porque a situación commaned-lo. Un dos meus sitios web, eu tiven esta situación onde eu tiven que aplicar "windows.onload" dúas veces. O primeiro que veu á mente un inexperto como o meu (teño que dicir honestamente que, unha vez que teño benvida a empregar frameworks JavaScript e bibliotecas, eu forgotton para facer cousas simples no meu propio ... triste pero é certo), é o seguinte método ...

 window.onload = onloadfn1;
 window.onload = onloadfn2;
 window.onload = onloadfn3;
 etc ..

Sentímolo dicir, pero, iso non vai funcionar ... non quero discutir a ciencia execución de Javascript moi ... pero segundo a miña experiencia recente, só a función anterior (onloadfn3) vai realmente mal executada.

En situacións normais, ao contrario do meu (que eu vou falar un pouco máis tarde) ... podería facer as seguintes opcións para realizar funcións de onload mutliple ....

Ou algo así

 doOnLoad function () {
         onloadfn1 ();
         onloadfn2 ();
         onloadfn3 ();
 }
 window.onload = doOnLoad;

Para a miña situación actual, non podo utilizar calquera dos anteriores ...
Por qué me teño chamar windows.onload dúas veces, en vez de chamar dúas funcións dentro dunha función onload único? Aquí é rápido ollar para a miña declaración do problema ...

"Páxinas do meu sitio web son estruturados como o tema do WordPress .... é dicir, hai un header.php e footer.php comúns que está incluído en todas as páxinas do sitio web. Hai unha implementaion función onload nos footer.php para facer algunhas funcións onload comúns. E hai poucas páxinas que precisan de algo da súa propia OnLoad, ademais daqueles feitos pola función onload común. Se eu asignar función de callback directamente ao manipulador de window.onload, ha sobrepasar-se callbacks previamente designados nos footer.php "

.... O meu problema entendido :) ?

Ben! existen poucas solucións que podo atopar. Todos eles son moi semellantes e, sobre todo, implementions dunha solución dada por Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Solución:

Basta engadir este código javascript á páxina web ...

 addLoadEvent función (func) {
     var oldonload = window.onload;
     if (typeof window.onload! = 'función') {
        window.onload = func
     Else {}
        window.onload = function () {
            if (oldonload) {
                   oldonload ()
           }
           func ()
        }
    }
 }

E chama-lo de vez da "windows.onload" usual

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Máis código para ser executado na carga da páxina *
 }); 

As vantaxes deste fragmento de código ...
1. En primeiro lugar, permite que ten eventos windows.onload múltiples, chamados de partes separadas do seu código, sen overridding a definición anterior
2. É moi discreto. Pode ser instalado nun arquivo con seus outros scripts ou nun ficheiro separado.
3. Funciona mesmo window.onload xa foi definido.


2008 20 de setembro de 2008

TEXTAREA problema do colapso no XSL / XSLT


Enunciado do problema:
Corrín a este problema en relación textareas en XSLs. En palabras simples, o problema xorde cando ten unha etiqueta <textarea> en branco, entón el ha recollelo para <textarea />.
é dicir, se tivese algo como o seguinte no seu XSL e os datos XML para o valor TEXTAREA, retorna nada ...

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ textarea>

Como os navegadores non recoñecen iso, fará que o resto do formulario HTML para ser executado na área de texto.

Posibles solucións:

No XSL, engade un espazo sen quebra-() despois do XSL: tag.BEWARE valor, para coidar deste espazo extra que se engade, durante validações do lado do cliente da zona.

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ textarea>

Ou
<xsl:value-of select="concat (DESCRIPTION,'')"/>

Ou
Insira un <xsl:value-of select="@unknown" tag /> apuntando cara un atributo descoñecido. Isto ha facer o PHP parser XSLT para xerar unha apertura e de peche tag área de texto, aínda que iso non ten nada no medio.

Ou
Inserir un campo de <xsl:text> contén un espazo para forzar unha marca de peche.

Con todo, aínda que as solucións anteriormente mencionadas pode parecer para resolver o problema, aínda non estou convencido de que están correctas e mellores formas de resolve-lo. Se hai calquera outra forma mellor de corrixir este equívoco, por favor, deixe-nos saber.


2008 14 setembro de 2008

Unha variedade de condicións de proba XSL (Colección de XSL: IF e XSL: Condicións Cando a proba)

Cada vez que teño que facer un XSL: IF ou XSL: Cando a proba, eu teño volver a os libros de referencia. Eu nunca me lembro deles. Pensei que habería máis aí fóra, así como eu, que prefiren prefire ter todos eles, é posible, nun lugar, listo para ser encamiñado, cando sexa necesario.

Para os que son novos ... Sintaxe para XSL: SE

<xsl:if test="expression">
<- Contido: template ->
</ XSL: if>

O XSL: if / XSL: cando o conxunto de proba
As condicións que seguen son todas simple e auto-explicativo. Entón eu creo que non vai ter moita explicación

<xsl:if test="position()=last()-1">
Isto o elemento penúltimo na lista!
</ XSL: if>

<xsl:if test="SALARY> 5000 ">
O salario da persoa é maior que RS. 5000
</ XSL: if>

<xsl:if test="count(JOBS)> 3 ">
Hai máis de 3 prazas de emprego nesta lista!
</ XSL: if>

<xsl:if test="(@DEPT ='SALES') ou (@JOINYEAR = '1997')">
Esta persoa é a partir de departamento de vendas ou o seu ano de adhesión e 1997
</ XSL: if>

<xsl:if test="EXPERIENCE">
Esta persoa ten polo menos un elemento fillo experiencia.
</ XSL: if>

<xsl:if test="@HOBBY">
A persoa ten un atributo hobby.
</ XSL: if>

As condicións texto mesmos poderían ser usados ​​para XSL: choose / XSL: CANDO ben

XSL: choose

XSL XSLT de instrución: escoller é semellante ao XSL: if, pero ten algunhas diferenzas fundamentais poucos:
• Un elemento XSL: choose pode probar máis dunha condición e engadir diferentes nós da árbore de resultado con base en que condición é certa.
• Un XSL: choose elemento pode ter un modelo estándar para engadir á árbore de resultado, se ningunha das condicións sexan certas. (Compare XSL: if, que non ten equivalente dunha condición "else").
• O XSL: choose elemento ten subelementos específicos que son necesarios para que funcione, mentres pode pór todos os elementos ben formados que quere dentro dun XSL: if elemento.

<xsl:choose>
<xsl:when test="boolean-expression">
Fai algo cando este boolean expresión é TURE
</ XSL: When>
<xsl:otherwise> facer outra cousa </ XSL: otherwise>
</ XSL: choose>


2008 13 de agosto de 2008

Tokenizing secuencia de caracteres delimitada dentro dun XSL

Se a súa esixencia é para dividir un valor de nodo nun XML, que contén unha secuencia de caracteres delimitada de valor, en elementos individuais, entón chegou ao lugar seguro ... ter un ollar para o seguinte exemplo. Se está familiarizado con un pouco de XML e XSL ... Eu non creo que ía ter que calquera explicación.
Ademais, este exemplo inclúe o uso de funcións como XSL XSL: call-template, XSL: substring, antes, XSL: substring-after, se é iso que está despois.

XML para ser transformado (food.xml): -
Supoñamos que a tarefa é tokenize a secuencia de caracteres delimitados por comas, nos a etiqueta de "keywords"

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.xsl): -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Resultante de saída HTML: -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

Nin que dicir ... só tes que cambiar o parámetro "delimitr" para o delimitador da súa elección


2008 04 de agosto de 2008

Un problema coa posición () en XSL ... ou si?

Eu tiven ese problema ao crear unha Almacenamento en XSL hoxe. Buscaba respostas en toda a rede, pero non podería atopar calquera .... En realidade, eu creo! Sei o que forza o meu problema era, entón o que debo buscar?

En fin! Só no caso de ter ese mesmo problema e tamén dalgunha forma polo poder a forza que conseguiu atinxir esta páxina ... podería me agradecer toneladas ... E se accidentalmente aterrou nesta páxina por algún estraño destino e ten que ser desenrolador XSL, fan unha nota DESTE Agora, para a causa futuro, se algún día, afrontar este problema, entón a forza pode non ser con vostede.

Enunciado do problema:
Eu teño ese XML, onde existen dous nós con varios elementos en que os elementos e entre estes dous nós teñen unha correspondencia un a un. No seguinte exemplo, cada elemento da <arrayname="PLAYURL" /> relaciona (posición correspondente) para un elemento da <arrayname="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Agora, eu teño un loop, onde i percorrer <array name="SITENAME">, e quero incorporarse o elemento relacionado (na posición correspondente) en <array name="PLAYURL">,

O que normaly tentar facer é ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Sentímolo! Iso non vai funcionar ... Ah! Surpised ...

Agora probablemente quere tratar, algo así ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

E De novo, isto non vai funcionar ... Agora coçar a cabeza, intentando poñerse en contacto con todos que pensas que sabe algunha XSL e podería ser de axuda ... tentar todas as opcións de outros ... e aínda non vai funcionar ... Ben! Iso é o que aconteceu cando menos ...

Desespero non fai! Proba ESTE

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Non me pregunta por que funciona. Porque eu non teño un motivo correcto ... se fai! Por favor, deixar un comentario. Pode ser moi útil. Tamén! se ten título mellor para este post, facer caer-me unha liña :)


2008 02 de agosto de 2008

Definir o DOCTYPE no XSL

A semana pasada eu creei un esquema HTML / CSS progessive a un cliente, proba no IE6, IE7 e FF 3, parecía perfectamente ben ... ata! o esquema foi máis baixo do ciclo manufacting. El fallou. Elementos de deseño de páxina só fun en todo o sitio cando o esquema HTML foi convertido en XSL e XML aplicada a el ... Bummer!

Non se pode durmir ok na fin de semana, na mañá anticipación do luns, cando eu vou ter que corrixir este SH **. Pero agora ter un pouco experince en tratar con este tipo de situacións (peculiaridades do navegador, quero dicir), sabía que tiña que ver con nada, pero DOCTYPE .... e foi ...

O problema:
Quere control sobre o DOCTYPE, desde a súa transformación incluirá un DOCTYPE estándar explícitamente, e deseño estará fóra por un tiro.

A solución:
XSLT especificacións ofrece métodos de saída para definir un DOCTYPE de elección. Ademais, para nós desenvolvedores de interface de usuario, os temas de interese serían métodos de saída HTML e métodos de saída XML .

Ben! antes de se cansar, aquí está a corrección.

Por exemplo, se tivese o DOCTYPE seguinte na súa versión HTML:. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

A continuación, no XSL que tería que ter o seguinte: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

e finalmente! asegúrese de que a súa saída XSLT obedece á DOCTYPE que escolleu.


2008 4 de maio de 2008

Engadir XSL XSL dentro

Se XML / XSL transforma é o seu Domian, entón hai momentos nos que queremos un pedazo de código dinámico para o uso elemento de biblioteca (para ser re-utilizable). O que quero dicir, probablemente podería ser máis claro con este escenario de exemplo.

Imaxina que está creando un sitio web (e usando XML, XSL transfroms por suposto) ea maioría das páxinas tería un módulo de comentarios. Ben! a continuación, copiar ou pegar este código en cada modelo de páxina (que eu non teño dicir, pero facer o mantemento e retrabalho un pesadelo) ou aínda mellor, se crea un ficheiro de inclusión que pode ser levado, onde queira que o quere na súa páxina ( s) ...
Entón, como imos crear un ficheiro XSL include e inclui-lo dentro doutro ficheiro XSL? Aquí está como ...

Só para facer as cousas claras ... Aquí está a lista rápida de ficheiros que crear ... aquí, estaremos incluíndo información sobre froitas e verduras nunha páxina pai chamado alimentos.

1. food.xml - ficheiro de datos XML de que a transformación aplicarase
2. food.xsl - arquivo XSL principal, que ha transformar o noso food.xml
3. inc_fruits.xsl - XSL incluír o ficheiro que irá procesar datos froitas
4. inc_vegtables.xsl - XSL incluír o ficheiro que irá procesar datos vetetables

Eu non creo que teño explicar moito, os códigos para elementos anteriormente mencionados, será auto-explicativo ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<hr/>
</ Body>
</ Html>
</ XSL: template>
</ XSL: stylesheet>


INC_FRUITS.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Descarga de todos os ficheiros anteriores aquí (252 descargas)


2008 04 de abril de 2008

Traballando con atributos nó XML XSLT

Se usar XML e XSL, entón vostede pode ter vindo a través dun tempo, cando ten que xogar con atributos e valores de nós XML de XSL ti. Son unha chea de sitios con información de alento longo sobre iso, pero ningún que eu atope foron breve e preciso ... Esta é ningún tutorial XML / XSL, pero a miña tentativa de pór en conxunto unha especie de fraude lista ...

A mostra XML que imos traballar con esta aparencia ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

Entón imos comezar a transformar o noso XML enriba usando XSL

Exemplo 1: Amosando valor dun atributo seleccionado

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

Resultado será coma HTML

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


Exemplo 2: Percorrer e amosar todos os nomes de atributo XML e os seus valores

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

Resultado será coma HTML


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


Descarga de todos os ficheiros anteriores aquí (245 descargas)



Assist a este espazo, eu vou continuar a actualizar esta con novos descubrimentos ...


NDK casa | Expresando IT | Palate expresando | Penmenship expresando | AWE expresando | expresar o meu