Ошибка при доступе к этой переменной в 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();
})
);
};