mootools переменная область - PullRequest
0 голосов
/ 25 января 2011

как получить доступ к аргументу внешней функции 'parent' ??? см. Комментарии в коде !!
Последнее редактирование: Этот вопрос вводит в заблуждение, моя проблема вызвана неправильным вводимым аргументом

renderData : function(parent, children){
            children.each(function(e, index){
                var li = new Element('li');
                var hasChildren = false;
                if(e.children && e.children.length >0){
                    var img = new Element('img');
                    img.src = 'a1.png';
                    img.inject(li);
                    hasChildren = true;
                }
                if(e.icon){
                    var img = new Element('img');
                    img.src = e.icon;
                    img.inject(li);
                }else{
                    var img = new Element('img');
                    img.src = 'b1.png';
                    img.inject(li);
                }
                li.set('html',e.text);
                console.log(this);
                     // how to access outer function's argument 'parent' ???
                li.inject(parent);
                if(hasChildren){
                    var ul = new Element('ul');
                    this.renderData(ul, e.childRen);
                    ul.inject(e);
                }
            }.bind(this));

Ответы [ 2 ]

1 голос
/ 25 января 2011

если я правильно понял, ваша проблема в том, что вы не можете сделать li.inject(parent)

нет причины, по которой вы не можете получить доступ к 'parent', так как он был передан в качестве параметра в функцию renderData()

Я пробовал этот простой тест

var test;
window.addEvent('domready', function(){
      test = new TestClass();
 });

var TestClass = new Class({
    Implements: [Options, Events],
    initialize: function(){
        this.renderData($('parent'),$$('span'))
    },

    renderData : function(parent, children){
          children.each(function(e, index){
                console.log(parent);
            }.bind(this));
    }
});

и он работает нормально ... но я не совсем уверен, в чем проблема в вашем коде

1 голос
/ 25 января 2011

в каждом цикле:

array.each(function(el) {
    this.method(); // this == (instance / scope)
}, this); // where **this** is your parent scope.

другой приемлемый способ:

var self = this;
...
array.each(function(el) {
    self.method(); // fine.
}); // where this is your parent scope.

http://mootools.net/docs/core/Types/Array#Array:Array-each

, хотя использование .bind(this) также должно работать... http://www.jsfiddle.net/dimitar/fFy4J/ - так в чем проблема?

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