2017-08-23 7 views
0

Est-il possible dans Aurelia d'utiliser vanilla js setAttribute() avec des attributs personnalisés? Lorsque j'inspecte le dom, le changement est fait sur l'élément personnalisé, mais il ne semble pas déclencher quoi que ce soit dans mon modèle ou ma vue, peu importe ce que j'essaie. Existe-t-il une «meilleure pratique» pour ce faire?Utilisation de setAttribute() sur un attribut personnalisé Aurelia

home.ts

export class Home{ 
    public onButtonClicked():void{ 
     document.getElementById('test123').setAttribute('color', 'green'); 
    } 
} 

home.html

<template> 
    <require from="../../elements/now-loading-circle/now-loading-circle"></require> 
    <button click.delegate="onButtonClicked()">Click</button> 
    <now-loading-circle id="test123" color="red"></now-loading-circle> 
</template> 

maintenant chargement-circle.ts

import {bindable, autoinject} from 'aurelia-framework'; 
@autoinject 
export class NowLoadingCircle{ 
    @bindable color:string; 
    public colorChanged(newValue):void{ 
     alert(newValue); 
    } 
} 

maintenant chargement-cercle.html

<template> 
    <svg viewBox="0 0 120 120"> 
     <circle repeat.for="circ of coords" cx="${circ.x}" cy="${circ.y}" r="${smallCircleRadius}" class="circ-${$index + 1}"></circle> 
    </svg> 
</template> 
+0

Est-ce que vous essayez d'utiliser setAttribute()? Comment était-ce? – zynkn

+0

@YoungKyunJin Oui, et quand j'inspecte le dom, le changement est fait sur l'élément personnalisé, mais il ne semble pas déclencher quoi que ce soit dans mon modèle ou ma vue, peu importe ce que j'essaie. –

+0

Puis-je voir votre code? – zynkn

Répondre

0

Non, Aurelia ne semble actuellement pas prendre en charge la liaison aux attributs personnalisés.

https://github.com/aurelia/binding/issues/380

+0

Merci pour la réponse. Ma question ne concerne pas la liaison aux attributs personnalisés. Il s'agit de répondre aux attributs qui sont modifiés via 'setAttribute' depuis l'intérieur de l'élément qui, selon ce lien, devrait fonctionner. Voir la 2ème à la dernière réponse dans le lien que vous avez posté. –

+0

Je pense que vous ne comprenez pas la réponse dans le lien que je vous ai donné. Dans cet exemple, il met à jour manuellement l'attribut element pour refléter le changement de propriété. Ce que vous cherchez est exactement le contraire, vous voulez que la valeur du modèle se mette à jour quand l'attribut change, ce qui n'est pas possible actuellement dans Aurelia. Il existe une distinction entre les attributs Dom et les propriétés de noeud, voir: https://stackoverflow.com/questions/6003819/properties-and-attributes-in-html – user1304988

0

La méthode la plus simple consiste à utiliser la liaison de données. Utilisez color.bind au lieu de définir l'attribut. Si vous définissez explicitement la valeur de l'attribut, alors, selon moi, vous n'utilisez pas Aurelia dans toute son étendue.

Voici ce que vous pouvez faire.

export class Home{ 
    color: string; // have a member in Home. 
    public onButtonClicked():void{ 
     this.color = 'green'; 
    } 
} 

Et puis utilisez la color en liaison de données:

<template> 
    <require from="../../elements/now-loading-circle/now-loading-circle"></require> 
    <button click.delegate="onButtonClicked()">Click</button> 
    <now-loading-circle id="test123" color.bind="color"></now-loading-circle> 
</template> 

Hope this helps.

+0

J'apprécie votre réponse. Je suis conscient de cette méthode mais je demande spécifiquement s'il est même possible d'utiliser 'setAttribute()' pour mettre à jour le composant. Presque tous les frameworks et bibliothèques de style de composant ont un moyen de répondre 'setAttribute()'. Je voulais juste savoir si Aurélia aussi. –