2011-12-22 41 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 –