Windows 8 访问对象';从回调函数中删除字段
我最近开始学习使用js开发metro应用程序,在更新回调函数中的Windows 8 访问对象';从回调函数中删除字段,windows-8,windows-runtime,winjs,Windows 8,Windows Runtime,Winjs,我最近开始学习使用js开发metro应用程序,在更新回调函数中的\u title和\u errorMessage字段\u success和\u error时遇到了问题。调用这些函数时,此不再引用MyClass对象。所以我的问题是如何从回调函数更新这两个字段 (function () { var MyClass = WinJS.Class.define( function () {}, { _title: "",
\u title
和\u errorMessage
字段\u success
和\u error
时遇到了问题。调用这些函数时,此不再引用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
});
})();
您可以使用函数的
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
});
})();
我不明白这些函数怎么会在错误的上下文中被调用。
没关系,我明白了。您可以使用代理变量,如下所示
Authorize: function () {
var _this = this;
WinJS.xhr({url:"http://example.com"}).
then(function(data){
_this._success(data);
}, function(data){
_this._error(data);
});
}