Magento 2 Knockout JS So binden Sie Daten aus der Antwort eines Ajax-Aufrufs

7

Ich möchte die Bildquelle an das folgende div binden.

<div class="head_label"><img class="bank_photo" data-bind="attr:{src: bankImage}"></div>

Es folgt mein Ajax-Aufruf und ihre Variable, die ich an image src binden möchte.

define(
[
    'jquery',
    'ko',
    'Magento_Checkout/js/view/payment/default',
    'Magento_Payment/js/view/payment/cc-form',     
    'Magento_Payment/js/model/credit-card-validation/validator',
    'mage/validation'           
],
function ($, ko, Component) {
    'use strict';

    var bankImage = '';

    return Component.extend({
        defaults: {
            template: 'Nitesh_Payment/payment/form',
            transactionResult: ''
        },
        ajaxCall: function(){
                $('#input-cc-number').blur(function(){
                    var cc = $(this).val();
                    var cc_length = cc.length;
                    if(cc_length>=6){
                        var data= {cc:cc}
                        $.ajax({
                            dataType: 'json',
                            url: url,
                            data: data,
                            type: 'post',
                            success: function(result)
                            {
                                var myObj = result;
                                this.bankImage = myObj.image;
                            },
                            error: function(){
                                alert("You Failed!");
                            }
                        });

                    }

                }); 
        },  

    });
}
);

Außerdem kann ich im Ajax-Aufruf nicht auf die Variable bankImage zugreifen. Bitte sagen Sie mir, wie ich in der Ajax-Funktion auf diese Variable zugreifen kann.

Nitesh
quelle
Gelöst: HTML <img id = "bankImage" class = "bank_photo" src = ""> Und in Erfolgsfunktion hinzugefügt -> $ ('# bankImage'). Attr ('src', result.image); Mein Problem gelöst
Nitesh

Antworten:

5

Fügen Sie zunächst Ihre Variable zum Standardobjekt hinzu, und Sie können den Standardwert für das Feld festlegen.

defaults: {
    bankImage : null
}

Definieren Sie Ihre Variable als beobachtbar

/**
 * Initialize observable properties
 */
initObservable: function () {
    this._super()
        .observe('bankImage');

    return this;
},

Und Sie müssen den richtigen Erfolgshandler mit Komponentenkontext definieren:

success: (function(result) {
    this.bankImage(result.image);
}).bind(this),
Max
quelle
1
Vielen Dank für Ihre schnelle Antwort. this.bankImage funktioniert nicht, wie kann ich das dann erfolgreich einsetzen?
Nitesh
Ich habe this.bankImage = result.image verwendet; Anstelle von this.bankImage (result.image); Aber dann gibt es auch keinen Fehler in der Konsole und das Image ist nicht an dieses Div gebunden.
Nitesh
1
this.bankImage wird nach der Definition als beobachtbar als Funktion umgeschrieben. knockoutjs.com/documentation/observables.html
Max
Wenn ich verwendet habe, wie du sagst, dann gibt es einen Fehler this.bankImage ist keine Funktion
Nitesh
Haben Sie die Funktion initObservable hinzugefügt?
Max
2

HTML

<img id="bankImage" class="bank_photo" src="">

Und in Erfolgsfunktion hinzugefügt ->

$('#bankImage').attr('src',result.image);

Mein Problem gelöst

Nitesh
quelle
Dies ist keine Bindung von Daten in Knockout-Titeln mit fehlendem Vorsprung.
Tomi
@Tomi warum stimmst du meine Antwort ab, anstatt die Frage zu bearbeiten?
Nitesh