2015-05-18 7 views
7

Niedawno miałem problemy z wiązaniem danych z elementu wejściowego z atrybutem "ciało" żelaza-ajax. Kiedy stosuje rdzeń AJAX na polimeru 0,5, można łatwo związać Takie wartości:polimer żelazo-ajax: Jak powiązać dane z elementu wejściowego z atrybutem ciała iron-ajax

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

Teraz próbował samo żelazem AJAX. Ale wysyła dosłownie "{{username}}" i "{{password}}" zamiast ich wartości. Oto kod:

Jak to działa? Dziękuję za twoje odpowiedzi :)

Odpowiedz

5

Możesz zadeklarować właściwość obliczoną dla ciała ajax. Podobnie jak

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

a następnie dodanie go na żelazo-ajax

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

to również działa w celu obliczenia właściwości 'params'. Jednak w tym przypadku chcesz zwrócić 'Object' zamiast łańcucha. –

+0

Dobra odpowiedź, użycie właściwości zamiast funkcji bezpośrednio pozwala na ponowne wywołanie, jeśli parametr zmieni się ... może nie być tutaj użyteczny, ale w niektórych innych przypadkach jest. –

+0

Powoduje to, że 'processBody' jest wywoływana przy każdej pojedynczej zmianie w polach wejściowych, a nie przy obliczaniu na serializację żądań. – user3467349

0

Inną opcją jest użycie Computed Bindings

Twój kod będzie wyglądać następująco:

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

Praca z nezem Polymer, ale składnia zmieniona na 'body =" [[getAjaxBody (nazwa użytkownika, hasło)]] "' –