2013-03-13 6 views
3

У меня есть следующие классыСсылка (не копия) класса в качестве члена другого класса - Mootools

The Box Класс

var Box = new Class({ 
    Implements: [Options], 
    options: { 
     name: 'new', 
     weight: 0 
    }, 
    initialize: function (options) { 
     this.setOptions(options); 
    }, 
    getParent: function() { 
     return this.options.parent; 
    } 
}); 

Коллекция Класс

var Collection = new Class({ 
    Implements: [Options], 
    options: { 
     boxes: [] 
    }, 
    boxes: [], 
    initialize: function (options) { 
     var self = this; 
     this.setOptions(options); 
     Array.each(this.options.boxes, function (box) { 
      self.boxes.push(new Box({ 
       parent: self, 
       name: box.name, 
       weight: box.weight 
      })); 
     }); 
    } 
}); 

Я передаю класс Collection (как parent) в коробку Класс, когда он создан.

var newCollection = new Collection({ 
    boxes: [ 
     { 
      name: 'A', 
      weight: 9 
     }, 
     { 
      name: 'B', 
      weight: 3 
     }, 
     { 
      name: 'C', 
      weight: 2 
     }, 
     { 
      name: 'D', 
      weight: 5 
     }, 
     { 
      name: 'E', 
      weight: 7 
     } 
    ] 
}); 

Я хочу parent в Box классе, чтобы быть ссылкой на Collection класса, а не копия, хотя кажется, что я получаю копию newCollection класса каждый раз, когда создаются Box класса (длина боксов различна для каждого из них)

Array.each(newCollection.boxes, function (box) { 
    console.log('*',box.getParent()); 
}); 

Я новичок в MooTools и даже если я прошел через документации, это путь, я закончил писать код. Есть ли более приемлемый шаблон кодирования в mootools, с помощью которого я могу ссылаться на parent?

Вот fiddle.

+0

Это действительно странно. Для этого мне нужно проверить исходный код mootools. –

ответ

1

Легко пропустить. setOptions (docs) глубокие копии объекты вариантов. Просто установите свойство parent вашего Ящика после его инициализации. Я опубликовал несколько измененную версию вашего code here

Array.each(this.options.boxes, function (box) { 
    var nB = new Box({ 
     name: box.name, 
     weight: box.weight 
    }); 
    // Note the difference 
    nB.parent = self; 
    self.boxes.push(nB); 
}); 
Смежные вопросы