6
votes

Comment créer une propriété Ember dépendante d'une variable, d'une fonction ou d'une logique normale?

Le problème

Je travaille sur une vue de feuillet pour Emberjs, et j'ai des problèmes. La notice est une bibliothèque externe et un peu pertinente pour la question, mais sachez simplement que c'est une bibliothèque de mappage. P>

Considérez une propriété simple comme le niveau de zoom. Les instances de la feuille de dépliant ont un niveau de zoom accessible via map.getzoom () code> et assignable via map.setzoom (zoomlevel) code>. En outre, les utilisateurs peuvent interagir avec la carte et changer son niveau de zoom. Leaflet nous permet de Enregistrer un rappel lorsque le zoom change. P>

J'aimerais que ma vision de «bracelet Ember» ait un Zoomlevel code> Ember Propriété. De cette façon, je peux bénéficier du modèle d'objet Ember (Bind zoomlevel code> à un modèle ou à une autre valeur, par exemple), et nous le faisons "The Ember Way". P>

Solution de base h2>

Qu'est-ce que j'ai actuellement est une sous-classe de Ember.View, avec une propriété Zoomlevel. Sur didinsertelement code> i crée l'instance de la feuille de la feuille. Le code est commenté et devrait être auto-explicite. P>

App.Leaflet = Ember.View.extend({
    classNames : ['ember-leaflet'],

    //default zoom level
    zoomLevel : 13,
    didInsertElement : function() {
        var self = this;
        var zoomLevel = this.get('zoomLevel');

        // create map instance
        var map = L.map(this.$().get(0)).setView(center, zoomLevel);

        // configure map instance...

        // Event listeners
        map.on('zoomend', function(e) {
            self.set('zoomLevel', e.target.getZoom());
        });

        // save map instance
        this.set('map', map);
    }
});


0 commentaires

3 Réponses :


1
votes

Pour aller de zoomlevel dans Ember pour setzoom Vous pouvez utiliser un observateur.

Pour aller dans l'autre sens, vous devrez peut-être lier un événement pour zoomchanger sur la notice


1 commentaires

Oui, c'était ma première tentative. Problème: Lorsque je défini zoomlevel sur l'événement zoomend , je déclenche automatiquement mon observateur. Est-ce que je me suis fait clairement?



2
votes

OK, je pense que je le faisais.

J'ai utilisé une propriété calculée et une propriété auxiliaire. xxx

essentiellement, il y a deux scénarios:

  1. zoomlevel a été changé de manière programmative -> Nous mettons à jour le zoom sur la carte
  2. Zoomlevel a été modifié sur la carte -> Nous définissons sur la propriété auxiliaire et les observateurs de la propriété de l'ordinateur seront également notifiés et nous n'avons pas réglé le niveau de zoom sur la carte

    Cependant, j'ai un nouveau problème, mais je pense que c'est un dépliant liée. Lorsque j'appelle setzoom lorsqu'une autre animation de zoom sur le parcours, cette SETZOOM est ignorée. Par exemple, exécution: xxx

    finit dans le niveau 1 Le niveau de zoom.

    peut-être une notice liée à la question peut aider .


3 commentaires

Cela s'est retrouvé dans un projet appelé Ember-Leaflet: MIGUELCOBAIN.GITUB.IO/ember-leaflele Les contributions sont les bienvenues!


Votre lien est cassé. Voici le bon: Leaflet Ember . Excellent travail au fait!


Merci! Ce projet n'est plus maintenu. Moi et certains autres développeurs ont commencé une autre ici: github.com/gabesmed/emberafleaflet it est beaucoup plus «Ember Way», plus structuré, avec des tests, etc. Je suis sûr que cela conviendra mieux à vos besoins. :)



1
votes

Avec une stratégie différente différente, j'ai fabriqué une propriété de zoomlevel et l'observe à partir d'une fonction et définit uniquement le zoom sur la carte si la valeur réelle de la propriété est différente du zoom réel. Voir ce violon http://jsfiddle.net/5as2z/30/ J'ai passé la logique à un contrôleur, la vue définit la carte lorsqu'il est inséré dans le document xxx

html xxx


0 commentaires