2011-12-22 102 views
2

即時通訊在javascript中使用Classy庫進行OOP編程。解決方案的JavaScript變量名稱衝突非iframe?

我編寫了一個類來處理DIV元素上的畫布操作。由於代碼的某些部分有一些困難,我不得不在類中使用對象變量名,即使它違背了OOP方法。

例如:

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

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

現在我需要使用這個類不止一次在不同的DIV一個文件中與該衝突使得impossible.Only解我所擁有的,使用iframe元素,以它們分開。

這是確定的,直到我想從一個笨視圖,而不是控制器獲取iframe中的內容。

想用這樣的

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

代替

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

那麼其他的解決辦法做,我們必須解決這個對象名稱發生衝突?

編輯

如果你問爲什麼你的代碼是擺在首位的是這樣,一些jQuery函數犯規讓你來傳遞參數(例如每())。實際上只有bind()函數允許參數傳遞,這對幫助很大。如果你知道任何解決方案,我會很高興。

EDIT2

難度此 可以說布拉布拉功能就像

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

每個功能內關鍵字 「this」 變成用於jQuery選擇指針。

+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')。each(function() {drawer.id = 1;}); –

+0

在each()函數中這個關鍵字變成了選中的html元素,所以你不能訪問對象本身的id –