1

sencha touch 2 は初めてです。qrCodeHtml 変数を設定して、JsonP リクエストの外で使用することができません。qrCodeHtml 変数を設定できることを除いて、このコードはすべて機能することを知っています。これを達成するのを手伝ってください:

    onMyProfileCommand: function () {
    var api_username = "o_xxxxx";
    var api_key = "R_xxxxxxxxxx";
    var long_url = "http://google.com";
    var qrCodeHtml = '';

    Ext.data.JsonP.request({
        url: 'https://api-ssl.bitly.com/v3/shorten',
        callbackKey: 'callback',
        params: {
            login: api_username,
            apiKey: api_key,
            longUrl: long_url
        },
        success: function (result, request) {
            var shortUrl = result.data.url;
            qrCodeHtml = '<div style="font-size:15px; margin-bottom:5px;">Friends can scan this to <a href="' + shortUrl +
                             '" style="color:inherit; text-decoration:none; font-weight:bold;">view your profile!</a></div><img src="' +
                             shortUrl + '.qrcode" style="height:110px; width:110px;" />';
        }
    });

    this.getLblQrCodeHtml().setData({ QrCodeHtml: qrCodeHtml });
    Ext.Viewport.animateActiveItem(this.getProfileView(), this.slideLeftTransition);
}
4

2 に答える 2

1

Goyuixに感謝します。必要なものだけです。解決策は次のとおりです。

    onMyProfileCommand: function () {
var api_username = "o_xxxxx";
var api_key = "R_xxxxxxxxxx";
var long_url = "http://google.com";
var controller = this;

Ext.data.JsonP.request({
    url: 'https://api-ssl.bitly.com/v3/shorten',
    callbackKey: 'callback',
    params: {
        login: api_username,
        apiKey: api_key,
        longUrl: long_url
    },
    success: function (result, request) {
        var shortUrl = result.data.url;
        var qrCodeHtml = '<div style="font-size:15px; margin-bottom:5px;">Friends can scan this to <a href="' + shortUrl +
                         '" style="color:inherit; text-decoration:none; font-weight:bold;">view your profile!</a></div><img src="' +
                         shortUrl + '.qrcode" style="height:110px; width:110px;" />';

        controller.getLblQrCodeHtml().setData({ QrCodeHtml: qrCodeHtml });
    }
});

Ext.Viewport.animateActiveItem(controller.getProfileView(), this.slideLeftTransition);

}

于 2012-12-10T14:44:55.130 に答える
0

JsonP リクエストは非同期で行われます。おそらく、最後の 2 つのステートメントを成功イベント ハンドラー内に移動するだけでよいでしょうか? それ以外の場合、リクエストはキューに入れられて発行され、qrCodeHtml 変数が生成しようとしている HTML に設定される前に、最後の 2 行がすぐに発行されます。

成功ハンドラー内で使用するには、外部関数から変数をキャプチャする必要があるためthis、他の変数が定義されている上部の近くのどこかで次のようにします。

var that = this;

that次に、リクエストが戻ってきたら、変数を使用して更新を実行するように成功ハンドラーを更新します。

success: function (result, request) {
  var shortUrl = result.data.url;
  qrCodeHtml = '<div style="font-size:15px; margin-bottom:5px;">Friends can scan this to <a href="' + shortUrl +
                         '" style="color:inherit; text-decoration:none; font-weight:bold;">view your profile!</a></div><img src="' +
                         shortUrl + '.qrcode" style="height:110px; width:110px;" />';
  that.getLblQrCodeHtml().setData({ QrCodeHtml: qrCodeHtml });
  Ext.Viewport.animateActiveItem(this.getProfileView(), this.slideLeftTransition);
    }
});
于 2012-12-08T16:01:36.803 に答える