DOJO: объяснение параметров функции - PullRequest
1 голос
/ 14 сентября 2011

Итак, я задал более ранний вопрос ( Оригинальный вопрос ).Я получил отличный ответ, который сделал именно то, что я хотел.Тем не менее, так как я новичок в Javascript / Dojo, я не смог полностью понять это, и никто не отвечал на этот вопрос.

У меня вопрос: как работает следующий код?

dndController: function(arg, params){
    return new dijit.tree.dndSource(
        arg,  // don't mess up with the first parameter
        dojo.mixin({}, params, {copyOnly:true}))
           //create a copy of the params object, but set copyOnly to true
}

Так что часть, которая меня больше всего беспокоит, это параметры "args" и "params".Я не понимаю, откуда они берутся и что они значат или представляют.(Если нужно, чтобы в коде было больше контекста, я могу отредактировать вопрос позже, поэтому просто опубликуйте его в комментариях).Кроме того, почему я не могу просто использовать new dijit.tree.dndSource напрямую и зачем мне нужно использовать функцию, чтобы вернуть его?

Спасибо

1 Ответ

1 голос
/ 14 сентября 2011

Взгляните на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...