Javascript 为什么可以';我不能访问对象的属性吗?
我试图从“accountsCardModel”对象访问属性“providerAccountId”,但由于某些原因,该属性未定义。我使用的是剑道可观测对象,get方法通常有效。我甚至尝试使用点符号访问存储在对象中的属性(没有运气) 在下一行,控制台抛出错误“无法读取未定义的属性'get'” 我不知道剑道内部是如何运作的。也许,剑道试图在我希望它执行之前执行代码,但这不太可能。也许这是一个提升问题。Javascript 为什么可以';我不能访问对象的属性吗?,javascript,kendo-ui,Javascript,Kendo Ui,我试图从“accountsCardModel”对象访问属性“providerAccountId”,但由于某些原因,该属性未定义。我使用的是剑道可观测对象,get方法通常有效。我甚至尝试使用点符号访问存储在对象中的属性(没有运气) 在下一行,控制台抛出错误“无法读取未定义的属性'get'” 我不知道剑道内部是如何运作的。也许,剑道试图在我希望它执行之前执行代码,但这不太可能。也许这是一个提升问题。 var accountsCardModel=kendo.observable({ ProviderA
var accountsCardModel=kendo.observable({
ProviderAccounted:“”,
数据源:新建kendo.data.datasource({
运输:{
阅读:{
url:MobileStorage.getServerURL()+“/cabinet/wicket/bookmarkable/com.web.services.AccountsService”,
数据类型:“json”,
类型:“POST”,
数据:{
作品:“读”,
provAccId:accountsCardModel.get(“providerAccountId”)
},
发送前:函数(jqXHR){
Utils.xhr.queue(jqXHR);
},
完成:函数(jqXHR){
Utils.xhr.dequeue(jqXHR);
}
}
},
模式:{
解析:函数(响应){
控制台日志(响应);
}
}
}),
showAccountDetails:函数(providerAccountId){
此设置(“providerAccountId”,providerAccountId);
}
});代码>我找到了一个解决方案:
跟踪了调用堆栈,看到剑道在我不知情的情况下在幕后执行我的命令,真是令人沮丧。我没有发送read:parameters,而是将其作为一个函数调用,它工作了
之前:
datasource: new kendo.data.DataSource({
transport: {
read: {
url: MobileStorage.getServerURL() + "/cabinet/wicket/bookmarkable/com.web.services.AccountsService",
dataType: "json",
type: "POST",
data: {
op: "read",
provAccId: accountsCardModel.get("providerAccountId")
},
beforeSend: function(jqXHR){
Utils.xhr.queue(jqXHR);
},
complete: function(jqXHR) {
Utils.xhr.dequeue(jqXHR);
}
}
},
schema: {
parse: function(response) {
console.log(response);
}
}
}),
Afer:
datasource: new kendo.data.DataSource({
transport: {
read: function(options) {
$.ajax({
url: MobileStorage.getServerURL() + "/cabinet/wicket/bookmarkable/com.web.services.AccountsService",
dataType: "json",
type: "POST",
data: {
op: "read",
provAccId: accountsCardModel.providerAccountId
},
success: function(result) {
options.success(result);
},
error: function(result) {
options.error(result);
},
beforeSend: function(jqXHR){
Utils.xhr.queue(jqXHR);
},
complete: function(jqXHR) {
Utils.xhr.dequeue(jqXHR);
}
});
}
},
schema: {
parse: function(response) {
console.log(response);
//return response.providerAccounts[0]; // Load only online account, omit autologin
}
}
})
成功了 试试这个provAccId:this.get(“providerAccountId”)
担心“this”关键字的范围会改变,但我试过了,没有用。
datasource: new kendo.data.DataSource({
transport: {
read: function(options) {
$.ajax({
url: MobileStorage.getServerURL() + "/cabinet/wicket/bookmarkable/com.web.services.AccountsService",
dataType: "json",
type: "POST",
data: {
op: "read",
provAccId: accountsCardModel.providerAccountId
},
success: function(result) {
options.success(result);
},
error: function(result) {
options.error(result);
},
beforeSend: function(jqXHR){
Utils.xhr.queue(jqXHR);
},
complete: function(jqXHR) {
Utils.xhr.dequeue(jqXHR);
}
});
}
},
schema: {
parse: function(response) {
console.log(response);
//return response.providerAccounts[0]; // Load only online account, omit autologin
}
}
})