12
votes

Comment recharger une asynchronisation avec la relation Links Hasmany?

permet de dire que nous avons xxx

et je dois utiliser la fonctionnalité car sinon je reçois une erreur 414 en raison de vos commentaires sur un post. < / p>

Depuis ce commit https://github.com/emberjs/data/commit / 4D717BFF53F8C93BEDBEBE74E7965A4F4398865A4F439882E259

Il semble qu'il est impossible de déclencher une recharge de la post.get ('Commentaires'), c'est-à-dire envoyer une demande d'obtention par exemple post / 42 / commentaires.

y a-t-il une solution pour cela?


4 commentaires

Je pense que la meilleure façon de résoudre ce problème est de remplacer la méthode de la méthode à partir de jarkARray , dans la classe MALLYARERAY . Et donner du contexte, comme les liens . Pour le moment, en utilisant comments.UPDate () va chercher tous les commentaires, énoncé de juste "post / 1 / commentaires". Mais pour faire cela, une demande de traction sera nécessaire.


Ouais, comme première tentative, j'ai essayé d'utiliser la méthode de mise à jour;). J'aimerais entendre @wycats sur cette suggestion de relations publiques.


Était-ce déjà soumis comme un PR?


Merci à @Igort, cela vient d'être poussé à Master maintenant: Github.com/emberjs/data/pull / 2297 s'il vous plaît essayez, vous avez beaucoup apprécié :)


6 Réponses :


1
votes

J'ai eu le même problème et j'ai triché pour trouver une "solution"

J'ai créé un composant "commentaires". Ce composant prend un argument (post_id) et Avant "Insertion" (WillinsERTelement), j'ai garé tous les commentaires et les rendant. ça marche mais ... je ne suis pas fier de cela: (


3 commentaires

Qu'entendez-vous par «GRAD TOUS les commentaires»? Vous faites une demande Ajax personnalisée dans le Willinsertelement, comme $ .ajax ('/ commentaires? Post_id = 42')?


Je voulais dire attraper: j'ai utilisé QueryParmas (this.store.find ('Commentaire', {post_id: params.post_id})


Ok, cela devrait fonctionner, mais malheureusement, cela ne se soucie pas des choses «liens». Merci d'avoir donné du temps à ce sujet. Je pense que je vais accepter @ Marcio-Rodrigues-Correa-Junior Répondre.



15
votes

Mise à jour forte>

Comme @ sly7_7 a déclaré dans votre réponse ci-dessous, cette fonctionnalité est maintenant disponible dans les données Ember-Data. Donc, si vous utilisez la version 1.0.0-BETA.11 ou plus, ce code n'est pas nécessaire p>

Vous pouvez rouvrir le roparyraray code> et créer une nouvelle méthode appelée reloadlinks () code>. Avec ce qui suit: p> xxx pré>

L'utilisation est la suivante: p>

comments.reloadLinks();


7 commentaires

C'est vraiment intéressant, et je pense que cela pourrait faire le travail pour l'instant :) Un commentaire cependant, je trouve que c'est bizarre de devoir donner le nom d'attribut, car la fonction elle-même est sur le baladray correspondant. Je pense qu'il est possible de le récupérer avec une réflexion sur les nombreux array?


Je n'ai pas trouvé de façon de le faire. Lorsque le nombre de tableau est créé Voici , nous avons le type et le propriétaire, mais pas le nom de propriété et nous avons besoin du nom de propriété. Dans votre cas, Poste de bacause n'a qu'une seule relation avec commentaire, peut-être qu'il est possible d'identifier la relation. Dans une autre situation où un modèle a deux relations du même type, comment savoir quel est le courant? Donnez un coup d'œil à ce code commenté jsfiddle.net/marciojunior/e2auc


On dirait qu'un MomalArray ait un «nom» de propriété, ce qui est exactement ce que vous recherchez. Ou peut-être que je manque quelque chose. Voir jsfiddle.net/mvxzn/2


Étonner! Vous avez raison, cette propriété est configurée ICI .js # l20 "rel =" nOfollow noreferrer "> Déclaration de classe donc je pensais que cela n'existe pas :) Je vais mettre à jour la réponse.


Oui, je vais essayer d'envoyer ce soir, il y a des choses à travailler, comme le drapeau isupdating et mettez à jour le MALLYARERAY au lieu de créer un nouveau. Merci pour le conseil du nom de la propriété, beaucoup aidé.


Ce serait-il un bon endroit pour faire pagination? Ajouter & offset = 10 et limite = 100 ou quelque chose de similaire à la lien


Nice correction, mais je devais ajouter une ligne de code supplémentaire à ce correctif. Juste une ligne au-dessus du Store.findhasmany , j'ai ajouté: meta.type = type; . Je travaille avec les données Ember 1.0.0-Beta.8 pour le moment.



0
votes

Une autre option consiste à ajouter une méthode au modèle. Devrait également fonctionner pour HASMANY:

search: DS.belongsTo('search', {async: true})

updateSearch: ->
  resolver = Ember.RSVP.defer()
  resolver.resolve = =>
    # do something after promise resolves
  relationship = @constructor.metaForProperty('search')
  link = @_data.links[relationship.key]
  @store.findBelongsTo this, link, relationship, resolver


0 commentaires

2
votes

Rechargement d'une HASMANY n'est pas encore directement intégré aux données Ember, mais c'est sur son chemin. La solution que j'utilise nécessite des données Ember Data 1.0b9 + Canarie, qui comprend 0 commentaires


1
votes

avec Ember-Data-1.0.0-Beta.10 strong> J'utilise l'extension de modèle suivante.

appelez simplement modèle.reloadrelationhip (nom) code> où Le nom est le nom de l'attribut modèle représentant la relation. p>

Ceci fonctionne à la fois pour les relations d'appartenance Normal et de lien entre eux / HASMANY. P>

DS.Model.reopen({
    reloadRelationship: function(key) {
        var record = this._relationships[key];
        if (record.relationshipMeta.kind === 'belongsTo') {
            return this.reloadBelongsTo(key);
        } else {
            return this.reloadHasMany(key);
        }
    },
    reloadHasMany: function(key) {
        var record = this._relationships[key];
        return record.reload();
    },
    reloadBelongsTo: function(key) {
        var record = this._relationships[key];
        if (record.link) {
            return record.fetchLink();
        } else {
            record = this.store.getById(record.relationshipMeta.type, this._data[key]);
            return record.get('isEmpty') ? this.get(key) : record.reload();
        }
    }
});


0 commentaires

7
votes

Merci à @Igort, ceci est mis en œuvre. https://github.com/emberjs/data/pull/2297

Maintenant, la méthode de Reload (), que vous pouvez même appeler si la relation n'a pas encore été chargée.

Vous pouvez voir des cas d'utilisation en lisant le tests


0 commentaires