Взгляните на dijit / Tree.js в исходном коде dojo.
в Tree.js, внутри функции postCreate (которая используется любым виджетом как часть жизненного цикла dijit):
if(this.dndController){
if(dojo.isString(this.dndController)){
this.dndController = dojo.getObject(this.dndController);
}
var params={};
for(var i=0; i<this.dndParams.length;i++){
if(this[this.dndParams[i]]){
params[this.dndParams[i]] = this[this.dndParams[i]];
}
}
this.dndController = new this.dndController(this, params);
}
Вы увидите раздел, в котором проверяется, что такое свойство dndController
.Если это строка, она устанавливает атрибут dndController для функции, которая создает класс, который описывает строка (это то, что делает dojo.getObject(string)
).
Например, если this.dndController был строкой "my.special.dnd.controlller"
, он вернул бы функцию, которая при вызове создает новый экземпляр my.special.dnd.controller
.
Затем он копирует некоторые параметры в объект, а затем выполняет функцию, которая была либо:
(1) поиск через dojo.getObject
(2) использует пользовательскую функцию, которую вы передали.
Я бы предположил, что сопровождающий этого виджета делает это так, поскольку некоторым людям нужно только указатьопределенный класс для использования в качестве контроллера dnd, в то время как другим нужно сделать что-то более нестандартное в зависимости от того, какие параметры передано Tree.