2015-05-18 8 views
7

Recentemente ho problemi con il binding dei dati dall'elemento input all'attributo "body" di iron-ajax. Quando usato core-ajax sul polimero 0,5, posso facilmente associare valori simili:polymer iron-ajax: Come legare i dati dall'elemento input all'attributo body-ajax di ferro-

<core-ajax 
      id="ajax" 
      method="POST" 
      contentType="application/json" 
      url="{{url}}" 
      body='{"username":"{{username}}", "password":"{{password}}"}' 
      handleAs="json" 
      on-core-response="{{responseHandler}}"> 
</core-ajax> 

Ora provato la stessa cosa con ferro-ajax. Ma invia letteralmente "{{username}}" e "{{password}}" invece dei loro valori. Ecco il codice:

<iron-ajax 
      id="ajax" 
      method="POST" 
      contentType="application/json" 
      url="{{url}}" 
      body='{"username":"{{username}}", "password":"{{password}}"}' 
      handle-as="json" 
      on-response="responseHandler"> 
</iron-ajax> 

Come farlo funzionare? Grazie per le vostre risposte :)

risposta

5

È possibile dichiarare una proprietà calcolata per il corpo dell'ajax. Come così

properties: { 
    ... 
    ajaxBody: { 
     type: String, 
     computed: 'processBody(username, password)' 
    } 
}, 
processBody: function(username, password) { 
    return JSON.stringify({username: username, password:password}); 
} 

E poi aggiungerlo su ferro-ajax

<iron-ajax ... body="{{ajaxBody}}"></iron-ajax> 
+1

Questo anche funziona per calcolare la proprietà 'params'. Comunque in questo caso vuoi restituire un 'Object' invece di una stringa. –

+0

Risposta piacevole, l'utilizzo della proprietà anziché di una funzione consente direttamente alla chiamata di essere eseguita di nuovo se un parametro cambia ... potrebbe non essere utile qui ma in altri casi lo è. –

+0

Questo fa sì che 'processBody' venga chiamato su ogni singola modifica nei campi di input, piuttosto che su serializzazione della richiesta calcolata. – user3467349

0

Un'altra opzione è quella di utilizzare Computed Bindings

il codice sarà simile a questa:

<iron-ajax 
     ... 
     body="{{getAjaxBody(username, password}}}" 
     > 
</iron-ajax> 
<script> 
Polymer({ 
    ..... 
    getAjaxBody: function(username, password) { 
    return JSON.stringify({username: username, password: password}); 
    } 
}) 
</script> 
+0

Lavorare con Nez Polymer ma la sintassi come modificata in 'body =" [[getAjaxBody (username, password)]] "' –

Problemi correlati