1

私は最近、js を使用した地下鉄アプリの開発を学び始め_titleまし_errorMessageたが、コールバック関数_success_error. これらの関数が呼び出されると、オブジェクトthisを参照しなくなりMyClassます。したがって、私の質問は、コールバック関数からこれら 2 つのフィールドを更新する方法です。

(function () {

 var MyClass = WinJS.Class.define(
            function () {},

            {
                _title: "",
                _errorMessage: "",

                Authorize: function () {
                    WinJS.xhr({url:"http://example.com"})
                        .then(this._success,this._error);
                },
                _success: function(data){
                    this._title = data.responseData;
                },
                _error: function (data) {
                    this._errorMessage = data.responseData;
                }

            },
            {

            }
        );

    WinJS.Namespace.define("MynameSpace",
        {
            MyClass: MyClass
        });

})();
4

2 に答える 2

2

できることの 1 つはbind、関数のメソッドを使用してコンテキストを設定することです。

(function () {

 var MyClass = WinJS.Class.define(
            function () {},

            {
                _title: "",
                _errorMessage: "",

                Authorize: function () {
                    WinJS.xhr({url:"http://example.com"})
                        .then(this._success,this._error);
                },
                _success: (function(data){
                    this._title = data.responseData;
                }).bind(this),
                _error: (function (data) {
                    this._errorMessage = data.responseData;
                }).bind(this)

            },
            {

            }
        );

    WinJS.Namespace.define("MynameSpace",
        {
            MyClass: MyClass
        });

})();

ただし、これらの関数が間違ったコンテキストでどのように呼び出されるかはわかりません。 気にしないでください。

于 2012-03-16T22:57:10.663 に答える
1

以下に示すように、プロキシ変数を使用できます

Authorize: function () {
     var _this = this;
     WinJS.xhr({url:"http://example.com"}).
     then(function(data){
              _this._success(data);
          }, function(data){
              _this._error(data);
          });
}
于 2012-03-16T23:23:39.217 に答える