2011-12-22 18 views
2

imは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の機能のいくつかは()インスタンスごとに、()の引数を渡すことができましょうdoesntの。実際にはbind()関数だけが引数の受け渡しを許可し、多くの助けになりました。もしあなたがそれについての解決策を知っていれば、私はうれしいでしょう。

EDIT2

難易度はこの では "この" キーワードはjQueryのセレクタのための指針となり、各関数内

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

ようblabla機能があると言うことができます。

+0

あなたは_why_変数名の充実/明確な説明は 'CanvasManager'で与えることができますか? – Shad

+0

それは競合するクラス名ではなく、オブジェクトの名前です –

答えて

1

解決策は、javascriptクロージャを使用することです。例えば : 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 –

関連する問題