为什么我无法访问对象的属性?

时间:2014-11-27 12:52:08

标签: javascript kendo-ui

我试图访问该物业" 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);
    }
});




1 个答案:

答案 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
        }
    }
})

它有效!