2017-09-30 1 views
1

Une application web Meteor étant utilisée par un utilisateur "marchand" connecté qui a besoin de créer un lien et sms/email à son client. Le lien ouvre un formulaire. Le client remplit le formulaire et le soumet de sorte que les données soient insérées avec une propriété merchantId, car de nombreux commerçants peuvent envoyer à de nombreux clients.
Cette application d'une seule page n'utilise pas de routeur mais peut envoyer des sms/e-mail. Comment lier un formulaire entre un commerçant et un client de manière élégante afin que les données du bon client soient "liées" au bon commerçant? MerciLien vers le formulaire envoyer et postérieurement envoyer à l'expéditeur dans Meteor

+0

Quelle est votre frontend-egine? Blaze, Réagir, Angulaire, Vue? – Jankapunkt

+0

Et le client ouvre-t-il à nouveau le formulaire dans l'application météore? – Jankapunkt

+0

Installation de Meteor standard avec Blaze, je ne sais pas si je comprends parfaitement votre deuxième question. –

Répondre

1

Merchant Part

Vous pouvez déclencher après une émission réussie de l'e-mail/sms une méthode de météore, qui stocke un enregistrement de l'e-mail/sms envoyé dans une collection (dans cet exemple nommé Record). Cela pourrait être le schéma pour elle:

Record Collection schéma (serveur/client)

{ 
    merchantId:String, // the id of the sender 
    customer:String, //id or name or address or phone num of receiver 
    opened:Boolean, //when the link is opened can be set to true 
    link:String, // the link to be send, 
    type:Number, //0=sms, 1=email, 
    expires:Date, //in case the link is not opened 
} 

Vous pouvez par exemple créer une méthode Meteor pour insérer le disque après l'envoi:

Insérer Record (serveur)

Meteor.methods({ 
    insertRecord:function(recordData) { 
     //... check recordData by schmema and permissions here 
     return Records.insert(recordData); 
    } 
}) 

S mettre fin à l'e-mail/SMS

Ainsi, la partie marchande de l'application envoie le lien via sms/e-mail et appelle la méthode insertRecord pour stocker l'enregistrement de la sauvegarde.

Conserver la fiche (client ou serveur)

const callback=function(err, res) { 
    if (res) { // assume your sent was successful here 
     Meteor.call("insertRecord", { 
      //... your record credentials 
     }); 
    } 
} 
// a little bit of pseudocode 
if (sms) 
    sms.send(form, callback); 
else 
    email.send(form, callback); 

partie client

Lorsque le client ouvre le lien qu'il déclenche une templatethat rendra votre formulaire. Vous pouvez initialement exécuter une méthode météore pour vérifier la collection Record pour un document qui correspond à l'URL du lien.

Get enregistrement par URL Méthode (serveur)

Meteor.methods({ 
    getRecordByUrl:function(url) { 
     //... do your input checks here 
     return Records.findOne({link:url}); 
    }, 
}); 

Modèle de formulaire (client)

Template.customerForm.onCreated(function(){ 

    const instance = this; 
    instance.state = new ReactiveDict(); 
    instance.state.set("record", null); 

    instance.autorun(function(){ 

     // if no record loaded yet 
     if (!instance.state.get("record")) { 

      Meteor.call("getRecordByUrl", window.location.href, function(err, res) { 
       if (err || !res) { 
        //...handle err 
       } 
       this.state.set("record", res); 
      }.bind(instance)); 
     } 
    }); 

}); 
Template.customerForm.helpers({ 
    getRecord() { 
     return Template.instance().state.get("record"); 
    }, 

    getMerchantId() { 
     const record = Template.instance().state.get("record"); 
     return record.merchantId; 
    } 
}); 

Vous pouvez ensuite utiliser ce document pour ajouter le merchantId à le formulaire en tant qu'entrée masquée ou via l'attribut de données html.

{{#if getRecord}} 
    <form id="..."> 
     <input type="hidden" name="merchantId" value="{{getMerchantId}}" /> 
     <!-- other inputs here --> 
    </form> 
{{/if}} 

Les exemples peuvent bien sûr être optimisés, mais je pense que cette façon plus claire à comprendre.

+0

Si un commerçant envoie une URL de formulaire comme 'www.company.com/customerPhoneNumber', comment puis-je obtenir le clientPhoneNumber onRendered afin que je puisse l'utiliser pour ouvrir un certain formulaire avec un assistant de modèle conditionnel et l'envoyer plus tard avec les données renvoyé par le client sur Envoyer? –

+0

traitez manuellement 'window.location.href' si vous n'utilisez pas de routeur. – Jankapunkt