我试图访问该物业" providerAccountId "来自" accountsCardModel "对象,但由于某种原因,它是未定义的。我使用的是Kendo Observable对象,get方法通常可以正常工作。我甚至尝试使用点表示法来访问存储在对象中的属性(没有运气)。
以下一行,控制台抛出错误"无法读取属性' get'未定义"
provAccId: accountsCardModel.get("providerAccountId")
我不知道剑道的内部运作方式。也许,kendo尝试在我想要它之前执行代码,但这不太可能。也许它是一个悬挂问题。
var accountsCardModel = kendo.observable({
providerAccountId: "",
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);
}
}
}),
showAccountDetails: function(providerAccountId){
this.set("providerAccountId", providerAccountId);
}
});

答案 0 :(得分:0)
好吧,我找到了解决方案:
跟踪调用堆栈,看到剑道在我不知情的情况下在幕后执行我的线路令人沮丧。我没有发送read:参数,而是将其称为函数,它起作用了。
<强>之前:强>
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
}
}
})
它有效!