Mootools повторно использует одну и ту же функцию в нескольких экземплярах с чем-то вроде каждой функции - PullRequest
1 голос
/ 02 ноября 2011

Я использую плагин стены mootools, он хорошо работает в моем приложении, однако, если я добавляю несколько стен (изображений), он работает только для одной стены ::: Мое понимание сценариев недостаточно для добавления каждой функцииили похожий ::: Мне нужно «связать» приведенный ниже код, чтобы сказать, что это 2 деления :::

Моя первая стена:

<div id="viewport">
<div id="wall">

Вторая стена:

<div id="viewport">
<div id="wall_02">

Буду признателен за любую помощь.

var wallIMAGES = new Wall( "wall", {

                    "width": scArray[1],
                    "height": scArray[1],

                    callOnUpdate: function(items){
                        items.each(function(e, i){
                            var el = wall[counterFluid];
                            if (el) {
                                var a = new Element("img[width="+scArray[1]+"][height="+scArray[1]+"][src={thumb}]".substitute(el));
                                    a.inject(e.node).set("opacity", 0).fade("in");
                                    e.node.store("tubeObject", el);
                            }
                            counterFluid++;
                            // Reset counter
                            if( counterFluid >= scArray[10].length) counterFluid = 0;
                        })
                    }

    });
        wallIMAGES.initWall();

Ответы [ 2 ]

0 голосов
/ 03 ноября 2011

Может быть, что-то вроде этого:

var my_wall_ids = ['wall', 'wall_02'];
var myWalls = [];
var baseWallOptions = {
        "width": scArray[1],
        "height": scArray[1],
        callOnUpdate: function(items){
            items.each(function(e, i){
                var el = wall[counterFluid];
                if (el) {
                    var a = new Element("img[width="+scArray[1]+"][height="+scArray[1]+"][src={thumb}]".substitute(el));
                    a.inject(e.node).set("opacity", 0).fade("in");
                    e.node.store("tubeObject", el);
                }
                counterFluid++;
                // Reset counter
                if( counterFluid >= scArray[10].length) {counterFluid = 0;}
            }); // end items.each
        }
}
for (var i=0;i<my_wall_ids.length;i++){
    var id = my_wall_ids[i];
    var wallOptions = baseWallOptions;
    // if your customization was something like changing
    // the height , but only on the 'wall' element
    if (id === 'wall') {
        wallOptions.height = 400;
    }
    myWalls[i] = new Wall(id, wallOptions);
    myWalls[i].initWall();
}
0 голосов
/ 02 ноября 2011

Если вы прочитаете документацию Wall , вы заметите, что, как и большинство других классов, первый аргумент, который он принимает, это элемент id.

Итак, если ваша инициализациякод состояния

new Wall("wall", { …

… тогда он будет применен к элементу с идентификатором "wall".

Вы можете просто продублировать свой код и использовать один со словом "wall", другойодин с "wall_02".Однако это было бы плохой практикой.Действительно, если позже вы захотите изменить некоторые параметры, вам придется сделать это в двух разных блоках, и они, вероятно, выйдут из синхронизации.

Если ваша единственная разница заключается в цели id,и параметры должны быть общими, просто сохраните объект параметров (второй параметр класса Wall) в переменной и используйте его дважды!То есть:

var wallOptions =  { width: … };

var wallImages = new Wall("wall", wallOptions),
    wallImages2 = new Wall("wall_02", wallOptions);

wallImages.initWall();
wallImages2.initWall();

Возможно, было бы даже лучше встроить инициализацию в функцию, но это решение, вероятно, самое простое, если вы просто хотите иметь два Wall экземпляра, не изучая гораздо больше о JS.

...