2011-12-22 2 views
2

메신저 javascript에서 OOP 프로그래밍을위한 Classy 라이브러리를 사용합니다.iframe이 아닌 다른 JavaScript 변수 이름이 충돌합니까?

DIV 요소에 캔버스 작업을 처리하는 클래스를 코딩했습니다. 코드의 일부 부분에서 약간의 어려움으로 인해 OOP 접근법에 위배되는 경우에도 클래스 내에서 객체 변수 이름을 사용해야했습니다. 예를 들어

는 :

drawer=new CanvasManager("div1",300,300); 

var CanvasManager= Class.$extend({ 
    blabla:function() 
{ 
    drawer.id=1; 
} 
}); 

지금 내가 다른 된 DIV에 하나 개의 문서에 한 번 이상이 클래스 이상을 사용해야하고이 충돌 내가, iframe이 요소를 사용하여 그것들을 분리해서하는 것입니다있는 솔루션을 impossible.Only 있습니다. 내가 컨트롤러 CodeIgniter의보기에서 대신 은 iframe 내용을 가져 오기 위해 원까지

그것은 확인했다.

대신

<iframe class="iframeclass1" src="<?php echo base_url(); ?>index.php/gallery/w2c/<?php echo $item->amount; ?>"> 
</iframe> 

<iframe class="iframeclass1"> 
<?php 
echo $this->load->view('gallery/w2',array('item'=>$amount),true); 
?> 
</iframe> 

같은 것을 사용하고 싶었 그래서 다른 솔루션 우리가이 개체의 이름 충돌을 해결해야합니까?

편집는 :

당신은 당신이 처음에 그런 식으로 코드 않은 이유를 묻는다면, JQuery와 기능의 일부는 인수를 전달하는하자 나던 (예를 들어 각()). 사실 bind() 함수는 많은 도움이되는 인수 전달을 허용합니다. 만약 당신이 그것에 대한 해결책을 알고 있다면 나는 기뻐할 것입니다.

EDIT2

어려움이 이다 "는이"키워드는 JQuery와 선택에 대한 포인터로 바뀝니다 각 함수 내

blabla:function() 
{ 
$('.somediv').each(function() 
{ 
    $(this).html(drawer.id); 
} 
) 
} 

처럼 blabla 기능이라고 할 수 있습니다.

+0

당신이 _why_ 변수 이름에 대한 풀러/명확한 설명을 줄 수는 CanvasManager''입니까? – Shad

+0

그것은 충돌하는 클래스 이름이 아니며, 객체의 이름입니다. –

답변

1

해결책은 자바 스크립트 클로저를 사용하는 것입니다. 예를 들어 : http://jsfiddle.net/C7yen/

<ul> 
    <li>a</li> 
    <li>b</li> 
    <li>c</li> 
</ul> 
<script> 
    obj={ 
     id:1, 
     set:function() 
     { 
      setF=(function(ev){ return function(){ $(this).html(ev.id) } })(this); 
      $('li').each(
    setF 
    ); 
     } 
    } 
window.onload=function() 
    { 
obj.set() 
    } 
</script> 
0

주어진 div에서 클래스 정의를 관리하는 싱글 톤 클래스를 만듭니다. 또한 왜 객체를 만들 수있을 때 전체 클래스를 제공합니까? 이것이 OOP의 주요 아이디어가 아닌가?

+0

나는 클래스 자체에 아무 것도주지 않았습니다./주어진 객체입니다. 서랍이 객체이고, canvasmanager가 클래스입니다. –

+0

귀하의 게시물을 아직 편집하지 않았을 때 게시했습니다. 이 경우 팩토리 메서드를 만들 수 있습니다. 그리고 div를 원하는 객체로 설정하십시오. – khael

+0

나는 그것이 틀렸다고 생각한다. 즉, 선택된 div들에 새로운 객체를 연결하거나 만들지 않는다. - $ ('. somediv') -. 메신저 그냥 해당 div의 innerhtml에 대한 몇 가지 작업을하고있다. –

1
var appInstances = new array(); 
var keys = new array(); 
var id; 

keys [0]['id'] = 'div1'; 
keys [0]['w'] = '300'; 
keys [0]['h'] = '300'; 
keys [1]['id'] = 'div2'; 

keys [1]['w'] = '300'; 
keys [1]['h'] = '300'; 

id = 0; 
appInstances[id] =CanvasManager(keys[id]['id'] , keys[id]['w'] , keys[id]['h']); 
id = 1; 
appInstances[id] =CanvasManager(keys[id]['id'] , keys[id]['w'] , keys[id]['h']); 

var CanvasManager= Class.$extend({ 
    blabla:function() 
{ 
    appInstances[id].id=1; 
} 
}); 
+0

문제는 클래스 메서드 내에서 Jquery 각 함수를 사용할 때 개체 자체에 대한 액세스가 느슨해지며 해당 ID가 무엇인지 알 수 없습니다. blabla 함수는 다음과 같습니다. blabla : function() { $ ('. somediv'). 각 (function() {drawer.id = 1;}); –

+0

each() 함수 내에서이 키워드는 선택된 html 요소가되므로 개체 자체의 액세스 ID는 사용할 수 없습니다. –

관련 문제