在dojojs中访问此变量时出错

r6hnlfcb  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(165)

这个变量可以在onContext函数中访问,但是我想将获取 AJAX json结果分配给网格的存储对象。网格是类似于grid:{store:“some-Json”}的对象,类似于示例

define([
    "dojo/_base/declare",
    "dojo/when",
    "aps/_View",
    "aps/xhr"
], function(
    declare,
    when,
    _View,
    xhr 
) {
    var page, grid, self, contextId,myResult,samp;
    return declare(_View, {
        init: function() {
             self = this;             
            return ["aps/Grid", {
                        id:                "srv_grid",                      
                        selectionMode:     "multiple",                          
                        columns: [{
                                field: "id",
                                name: "Id"                              
                            }]
                    },

            ];

        },   // End of Init

        onContext: function(context) {  
            this.grid = this.byId("srv_grid");          //working
            xhr.get("/aps/2/resources/" + aps.context.vars.device.aps.id  + "/getresource").
            then(function(data){                
                myResult=data;                    
                        this.grid.params.store=data; //got error here this.grid is undefined
                        this.grid.store=data;        //got error here this.grid is undefined            

                            }
            ),

            this.grid.refresh();

        },
    });     // End of Declare
});         // End of Define

init是首先调用的第一个方法,然后onContext方法调用..此字在该函数中可用,并且this变量具有此.grid属性,此.grid属性在xhr.get()中不可访问。此属性在xhr.get()中已更改。我希望在xhr.get()函数中访问此的所有属性。因为我想把 AJAX 结果赋给this.grid.storethis.grid.params.store属性

jdg4fx2g

jdg4fx2g1#

您可以使用

dijit.byId("srv_grid").set("store",data);

self.grid.set("store",data); //self contains reference to the entire widget because in init function, you have assigned 'this' to 'self' variable.

“this”总是给你在那个上下文中的属性或对象,所以在xhr.get中,你可以访问xhr中所有可用的东西,但是它之外的东西是不可访问的。

iqxoj9l9

iqxoj9l92#

您必须使用dojo/_base/lang-> hitch函数来设置函数将执行的范围。
在您的示例中,this.grid.params...引用then(xhr),因此它将返回一个未定义的错误
因此,您必须在模块范围内执行函数,如下所示:
在重要的dojo/_base/lang -> lang之后

onContext: function(context) {  
   this.grid = this.byId("srv_grid");          //working
   xhr.get("/aps/2/resources/" + aps.context.vars.device.aps.id  + "/getresource").
   then(
      lang.hitch(this,function(data){ // bind the function to the actual context (this)               
         myResult=data;                    
         this.grid.params.store=data; //got error here this.grid is undefined
         this.grid.store=data;        //got error here this.grid is undefined            

         this.grid.refresh();
      })
   );
};

相关问题