除iframe之外的javascript变量名冲突的解决方案?

时间:2011-12-22 02:51:01

标签: javascript jquery html oop codeigniter

我在javascript中使用Classy库进行OOP编程。

我编写了一个处理DIV元素上的canvas操作的类。由于代码的某些部分存在一些困难,我必须在类中使用对象变量名,即使它违反了OOP方法。

例如:

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

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

现在我需要在不同DIV的一个文档中不止一次使用这个类,这种冲突使它变得不可能。我只有使用iframe元素来解决它们。

直到我想从 codeigniter视图而非控制器获取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函数不允许你传递参数(例如each())。实际上只有bind()函数允许参数传递,这有助于很多。如果你知道任何解决方案我会很高兴。

EDIT2

困难在于此 让我们说blabla功能就像

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

在每个函数中,“this”关键字成为jquery选择器的指针。

3 个答案:

答案 0 :(得分: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;
}
});

答案 1 :(得分: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>

答案 2 :(得分:0)

创建一个单例类来管理给定div上的类的定义。还有为什么在创建对象时给出整个类?这不是OOP的主要想法吗?