2017-05-31 2 views
0

J'ai un modèle Styles (Garments) et un modèle Images et un un à plusieurs Styles < = Relation images.La mise à jour des relations à l'aide du script écrase les relations pour tous les enregistrements, sauf les plus récents

J'ai un widget jQuery Cloudinary pour télécharger des images, puis j'essaie de mettre à jour la relation Images avec l'URL des images. L'intention est alors d'afficher ces images dans un tableau.

Cependant, lorsque je mets à jour la relation en utilisant mon code, elle enregistre uniquement le StyleCode le plus récent par rapport à la relation.

Donc, si je sauve une image, puis un autre, la table d'image va de ceci:

Image URL   Style 
http://abc  1234 

à cette

Image URL   Style 
http://abc  <blank> 
http://xyz  1234 

Ma première question est, comment la relation fonctionne? Il semble qu'il repose sur mon StyleCode pour garder la relation d'enregistrement. J'aurais pensé que ça aurait été _key ..... ???? Deuxièmement, y a-t-il quelque chose que vous pouvez repérer dans mon code qui pourrait écraser le StyleCode précédent?

code côté serveur

function saveImageToStyle(images, styleCode) { 
    var imgs = []; 
    images.forEach(function(image) 
    { 
    var imageRecord = app.models.Images.newRecord(); 
    imageRecord.ThumbnailURL = image.thumbnail_url; 
    imageRecord.ImageURL = image.url; 
    imageRecord.Path = image.path; 
    imageRecord.ImageName = image.original_filename; 
    imgs.push(imageRecord); 
    }); 
    app.saveRecords(imgs); 
    var query = app.models.Styles.newQuery(); 
    query.filters.StyleCode._equals = styleCode; // is it this??? 
    var styleRecord = query.run()[0]; 
    styleRecord.Images = imgs; 
    app.saveRecords([styleRecord]); 
} 

code côté client

function saveStyleImages(images) { 
    var styleCode = app.datasources.Styles.item.StyleCode; // is there a better way to get the current StyleCode? 
    var status = app.pages.StyleEdit.descendants.Status; 
    google.script.run 
    .withFailureHandler(function(error) { 
    status.text = error.message; 
    }) 
    .withSuccessHandler(function(result) { 
    status.text = images + "success"; 
    }) 
    .saveImageToStyle(images, styleCode); 
} 

Répondre

0

La ligne suivante remplace toutes les associations existantes de style: styleRecord.Images = imgs; vous pouvez le remplacer par: styleRecord.Images = styleRecord.Images.concat (imgs);

+0

Merci! Je l'ai fait avec styleRecord.Images.push (imgs) :) – Samuurai

+0

Le correctif officiel d'un employé de Google a dit que vous devez le faire de cette façon: pour (var i = 0; i Samuurai

1

On dirait que vous pouvez tout faire sur le client (si vous ne disposez pas de limites avec votre modèle de sécurité):

function addStyleImage(newImage) { 
    var newImageDs = app.datasources.Styles.relation.Images.modes.create; 
    var newImage = newImageDs.item; 

    newImage.ThumbnailURL = image.thumbnail_url; 
    newImage.ImageURL = image.url; 
    newImage.Path = image.path; 
    newImage.ImageName = image.original_filename; 

    newImageDs.createItem(function(record) { 
    // do smth with new record 
    }); 
} 

Avec cette approche, vous verrez immédiatement une nouvelle image sur le client (si la relation Images est liée à table/liste/grille).

En savoir plus:

https://developers.google.com/appmaker/models/datasources#create_mode_datasource

+0

Je ne savais pas que je pouvais faire tout cela sur le client. Je vais essayer ça! Merci! – Samuurai

+0

Vous êtes les bienvenus! Ne pas oublier d'accepter la réponse si cela va travailler pour vous aider vos camarades AM. –