J'ai un 3 listItems et quand je clique sur l'un d'eux, je veux que la barre verte s'anime de la droite vers la gauche. Mais il ne se comporte pas correctement .. Lorsque vous cliquez sur rien ne se passe, lorsque vous cliquez une seconde fois (facultativement sur une autre ligne) chose devient tout simplement funky. Existe-t-il une solution appropriée pour cela?enyo animant un listItem
http://jsfiddle.net/joopmicroop/6GJs4/
enyo.kind({
name:'main',
classes: "enyo-fit",
components:[
{name:'list', kind:'enyo.List', count:'3', onSetupItem:'itemSetup', components:[
{name:'listItem', kind:'listItem', ontap:'itemTapped'},
]},
],
itemTapped:function(s,e){
console.log('itemTapped',e.rowIndex);
this.$.list.prepareRow(e.rowIndex);
this.$.list.performOnRow(e.rowIndex, function(){ this.animate(); }, this.$.listItem);
this.$.list.lockRow();
this.$.list.renderRow(e.rowIndex);
},
itemSetup:function(s,e){ this.$.listItem.setText('item'+e.index); }
});
enyo.kind({
name:'listItem',
classes:'listItem',
published:{text:''},
create:function(){
this.inherited(arguments);
this.animator = new enyo.Animator({
onStep:enyo.bind(this, function(animObj){
this.$.backBar.applyStyle('width',animObj.value+'%');
}),duration:1000
});
},
components:[
{name:'backBar', classes:'animBar'},
{name:'itemContent', content:''},
],
animate:function(){
if(!this.animator.isAnimating()) this.animator.play({startValue:10, endValue:100});
},
textChanged:function(oldVal){ this.$.itemContent.setContent(this.text); },
});
(new main()).renderInto(document.body);
pjetr sur http://webchat.freenode.net/?channels=enyojs noté que dans l'onStep de l'animateur, que ce. $. BackBar.hasNode() = false. Ce qui est un bon point, mais pourquoi? ne sont pas les nœuds créés dans la fonction create? – joopmicroop
les noeuds DOM (qui renvoie ce que hasNode() renvoie) ne sont pas créés tant que la méthode render() n'est pas terminée. Un enyo.Control lui-même est prêt à la fin de create(), mais pas son noeud DOM. – sugardave