Ошибка при доступе к этой переменной в dojojs

Эта переменная доступна в функции 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 недоступно в xhr.get(). Свойства этого изменены в xhr.get(), Я хочу получить доступ ко всем свойствам этого внутри xhr.get() функция. Потому что я хочу присвоить свой результат AJAX JSON this.grid.store а также this.grid.params.store имущество

2 ответа

Ты можешь использовать

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, но что-либо вне этого недоступно.

Вы должны использовать додзё / _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();
      })
   );
};
Другие вопросы по тегам