我最近开始学习使用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
});
})();
答案 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);
});
}