2013-04-02 2 views
0

개체를 다른 개체로 보내려고합니다.Moolool onClick 개체를 보내십시오.

var Tile = new Class({ 
    initialize : function(){ 
     this.inner = new Element(...); 
     this.inner.addEvent('click', function() { 
      popup.open(this); 
     }); 
    } 
}); 

타일 아웃 팝업에서 멤버 변수를 경고하는 경우 경고가 '정의되지 않음'입니다. 내가 뭘 잘못하고 있니?

var Popup = new Class({ 
    initialize : function(){ 
    }, 
    open : function(tile) { 
     alert(tile.width); 
    } 
}); 

친절에 감사드립니다!

+0

popup'의 인스턴스가'코드를 기입하십시오. –

+0

팝업이 window.addEvent ('domready'...)에 시작되었습니다. 타일로 바뀝니다. 나는 첫 번째 게시물을 업데이 트했습니다! – marius

답변

2

popup 개체에 this을 전달하면 요소 자체를 전달하게됩니다 (귀하의 의도라고 생각합니다). 그러나 요소에는 기본적으로 width이라는 속성이 없습니다.

아마도 getSize();을 찾고 계십니까? 그러면 요소의 너비와 높이에 각각 해당하는 두 속성 개체 (xy)가 반환됩니다. 여기에 새로운 Popup 클래스 코드이며, 참고로 http://jsfiddle.net/g4SmJ/

: 나는 다음과 같은 jsFiddle에 코드를 근사했습니다

, 한번 시도해

var Popup = new Class({ 
    initialize : function(){ 
    }, 
    open : function(tile) { 
     size = tile.getSize(); 
     console.log(size); // console.log provides a nicer interface for debugging, you can pass objects into it! Use the Chrome Inspector or Firebug to see its output. 
     alert(size.x); 
    } 
}); 

에 대응하여 댓글 :

오 위로 나는 돔스의 폭을 경고하려고하지 않았습니다. 죄송합니다. 내가 게시 한 것은 전체 객체의 작은 코드입니다. 폭 실제로 나는이 경우 팝업

밖으로 경고하고 싶었다 타일에 정의 된 멤버였다, 당신은 .open();에 전화를 전송하는 다음 때, 당신은 함수 호출에 this을 통과하지만, 당신은 통과되지 않습니다 Tile 개체! 대신, 작성한 inner 요소를 전달했습니다. thusly 히

재 작성 Tile :

var Tile = new Class({ 
    initialize : function(){ 
     var self = this; 
     this.inner = new Element(...); 
     this.inner.addEvent('click', function() { 
      popup.open(self); 
     }); 
    } 
}); 
+0

오, 나는 돔스 폭을 경계하려고하지 않았다. 유감스럽게 생각한다. 내가 게시 한 것은 전체 객체의 작은 코드입니다. 폭은 실제로 타일에서 정의 된 멤버였습니다. 팝업을 알려주고 싶습니다. – marius

+0

개정 된 게시물을 참조하십시오. :) @ Adidi와 나 자신이 제공 한 두 가지 해결책 모두 문제를 해결해야합니다. –

+0

완벽! 잘 작동합니다! – marius

1

나는 당신이 Tile 인스턴스를 보내 찾고있는 것 같아요. 위의 대답처럼 - 안에 addEvent 메서드를 보내면 이벤트를 호출 한 요소 자체가 전송됩니다.이 경우에는 onclick을 정의한 후 inner 인스턴스를 보내고 있습니다. 당신이 타일 인스턴스를 보내려면

당신은 두 가지 옵션이 있습니다 :

이 함수에 1) 바인드 - 이벤트에 당신이 타일 (에있는 현재 범위) "을 연결"의미 :

var Tile = new Class({ 
    initialize : function(){ 
     this.inner = new Element(...); 
     this.inner.addEvent('click', function() { 
      popup.open(this); // <- now this is 'Tile' instance 
     }.bind(this)); //bind this to click 
    } 
}); 

2) 기능의 범위를 벗어난 인스턴스를 저장하고 내부 사용 :

var Tile = new Class({ 
    initialize : function(){ 
     this.inner = new Element(...); 
     var self = this; //save the this to var 'self' 
     this.inner.addEvent('click', function() { 
      popup.open(self); //use self which holds the Tile instance 
     }); 
    } 
}); 
관련 문제