Решение для конфликта имен переменных JavaScript, кроме iframe? - PullRequest
2 голосов
/ 22 декабря 2011

я использую библиотеку Classy для программирования ООП в javascript.

я закодировал класс, который обрабатывает операции холста над элементом DIV.Из-за некоторых трудностей в некоторых частях кода мне пришлось использовать имя переменной объекта внутри класса, хотя это противоречит подходу ООП.

например:

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

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

Теперь яМне нужно использовать этот класс более одного раза в одном документе на разных DIV, и этот конфликт делает его невозможным. Единственное решение, которое у меня есть, это использование элементов iframe для их разделения.

Это было нормально, пока я не захотел получить содержимое iframe.из вида codeigniter вместо контроллер .

хотел использовать что-то подобное

<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>

Итак, какое еще решение мы должны решить для этого конфликта имен объектов?

edit :

, если вы спросите, почему вы его кодировалитаким образом, во-первых, некоторые функции jquery не позволяют передавать аргументы (например, each ()).фактически только функция bind () позволяет передавать аргументы, что очень помогло.если вы знаете какое-либо решение для этого, я был бы рад.

edit2

Трудность в том, что, скажем, функция Blabla похожа на

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

внутри каждой функции ключевое слово "this" становится указателем для селектора jquery.

Ответы [ 3 ]

1 голос
/ 22 декабря 2011
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 голос
/ 22 декабря 2011

решение заключается в использовании 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 голосов
/ 22 декабря 2011

Создайте одноэлементный класс для управления определением ваших классов по заданным элементам div. Кроме того, зачем давать целый класс, когда вы можете создать объект? Разве это не главная идея в ООП?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...