从回调函数访问对象的字段

时间:2012-03-16 22:53:49

标签: windows-8 windows-runtime winjs

我最近开始学习使用js开发metro应用程序,我在回调函数_title_errorMessage中遇到了更新_success_error字段的问题。当调用这些函数this时,不再引用MyClass对象。所以我的问题是如何从回调函数更新这两个字段。

(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
        });

})();

2 个答案:

答案 0 :(得分:2)

您可以做的一件事是使用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
        });

})();

我不明白如何在错误的上下文中调用这些函数。 没关系,我明白了。

答案 1 :(得分:1)

您可以使用代理变量,如下所示

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