2013-03-13 12 views
3

我有以下類參考(未複製)一類作爲另一個類中的一員 - Mootools的

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)傳遞給Box類時它被創建。

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 
     } 
    ] 
}); 

我想在Boxparent要到Collection類,而不是一個副本的引用,看來雖然我一次創建Box上課時間的newCollection類的副本(長度盒子的是爲每一個不同的)

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

我是新來的mootools,即使我已經通過文件了,這是我最後寫代碼的方式。在mootools中,我可以參考parent嗎?

這是fiddle

+0

這真的很奇怪。我需要檢查mootools的源代碼。 – 2013-03-13 13:39:25

回答

1

容易錯過。 setOptionsdocs深拷貝選項對象。初始化後,只需設置Box的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); 
}); 
相關問題