0

此变量可在 onContext 函数中访问,但我想将获取的 ajax json 结果分配给网格的存储对象。grid 是像 gride:{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变量具有 this.grid 属性,this.grid 属性在 中不可访问。 this的属性在xhr.get()中更改xhr.get()。我想访问这个内部xhr.get()函数的所有属性。因为我想将我的 ajax json 结果分配给this.grid.storethis.grid.params.store属性

4

2 回答 2

0

您必须使用dojo/_base/lang 挂接 -> 功能,设置您的功能将执行的范围。

在你的情况下,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();
      })
   );
};
于 2017-09-21T09:57:34.290 回答
0

您可以使用

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 一部分可用的所有内容,但无法访问它之外的任何内容。

于 2017-09-20T13:34:45.740 回答