2012-06-02 2 views
39

Wie geht Meteor mit Live-Änderungen um? Zum Beispiel möchte ich nicht, dass Änderungen sofort erfolgen, sondern mit einer Art Animation. Wenn wir die Elemente, die geändert werden sollen, mit CSS-Animationen/Übergängen platzieren, funktioniert das? Was ist mit jQuery-Animationen für ältere Browser?Kann Meteor live Änderungen haben Animationen?

+1

+1 interessant, das wahrscheinlich wi ll erfordern einige Implementierungsänderungen. –

Antwort

11

Hier ist ein Arbeitsbeispiel für eine einfache Animation mit Meteor.

Die Situation hier ist, dass wir eine Liste von Elementen haben. Wenn der Benutzer auf eines dieser Elemente klickt, animiert das Objekt 20 Pixel nach links.

JS

//myItem 
Template.myItem.rendered = function(){ 
    var instance = this; 
    if(Session.get("selected_item") === this.data._id){ 
    Meteor.defer(function() { 
     $(instance.firstNode).addClass("selected"); //use "instance" instead of "this" 
    }); 
    } 
}; 

Template.myItem.events({ 
    "click .myItem": function(evt, template){ 
    Session.set("selected_item", this._id); 
    } 
}); 


//myItemList 
Template.myItemList.helpers({ 
    items: function(){ 
    return Items.find(); 
    } 
}); 

Vorlagen

<template name="myItem"> 
    <div class="myItem">{{name}}</div> 
</template> 

<template name="myItemList"> 
    {{#each items}} 
    {{> myItem}} 
    {{/each}} 
</template> 

CSS

.myItem { transition: all 200ms 0ms ease-in; } 
.selected { left: -20px; } 

Statt Phantasie CSS verwenden, können Sie auch mit jQuery animieren:

Template.myItem.rendered = function(){ 
    if(Session.get("selected_item") === this.data._id){ 
    $(this.firstNode).animate({ 
     left: "-20px" 
    }, 300); 
    } 
}; 

Aber dann müssen Sie den CSS-Code entfernen.

.myItem { transition: all 200ms 0ms ease-in; } 
.selected { left: -20px; } 

+0

Danke, das hat mir geholfen. Hinweis 'if (Session.get (" selected_item ") === this.data._id) hat bei mir nicht funktioniert; Ich musste die 'gerenderte' Funktion so modifizieren, dass sie eine Zeile wie diese enthielt: '$ ('#' + Session.get (" selected_item ")). AddClass (" selected ")'. –

+0

@TimBartsch Ich kann 'Meteor.defer()' nicht aus den Dokumenten finden. Was tut es? –

5

Es gibt eine Abhilfe wie folgt aus:

<template name="foo"> 
    ..content.. 
    {{bar}} 
</template> 

In diesem Fall Meteor Template.foo.bar jedes Mal diese Vorlage gerendert wird nennen. Innerhalb dieser Funktion können Sie alle Arten von Jquery- oder CSS3-Animationen ausführen (zum Beispiel indem Sie eine Klasse zum Templates div hinzufügen).

+10

ein Beispiel wäre hier toll gewesen. (Beachten Sie, dass Upvotes für "nützliche Fragen" viel mehr sind als "Antwort ist nützlich"). Vielleicht können Sie Ihre Antwort aktualisieren? –

Verwandte Themen