#mootools #bind
#mootools #привязка
Вопрос:
Я использую плагин mootools wall, он хорошо работает в моем приложении, однако, если я добавляю несколько (графических) стен, он работает только для одной стены ::: Мое понимание сценариев недостаточно для добавления каждой функции или аналогичного ::: Мне нужно «привязать» приведенный ниже кодчтобы сказать 2 divs, как это :::
Моя первая стена:
<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();
Ответ №1:
Может быть, что-то вроде этого:
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();
}
Комментарии:
1. Это работает хорошо @artlung, СПАСИБО ::: Теперь я могу использовать его и продолжить работу с опциями :::
Ответ №2:
Если вы прочитаете документацию Wall, вы заметите, что, как и в большинстве других классов, первым аргументом, который он принимает, является элемент id
.
Итак, если в вашем коде инициализации указано
new Wall("wall", { …
… затем он будет применен к элементу с идентификатором «стена».
Вы могли бы просто дублировать свой код и использовать один с «wall», другой с «wall_02». Однако это было бы плохой практикой. Действительно, если бы вы позже захотели изменить некоторые параметры, вам пришлось бы делать это в двух разных блоках, и они, вероятно, не синхронизировались бы.
Если ваше единственное отличие заключается в цели id
, а параметры должны быть общими, просто сохраните объект options (второй параметр для Wall
класса) в переменной и используйте его дважды! То есть:
var wallOptions = { width: … };
var wallImages = new Wall("wall", wallOptions),
wallImages2 = new Wall("wall_02", wallOptions);
wallImages.initWall();
wallImages2.initWall();
Было бы еще лучше встроить инициализацию в функцию, но это решение, вероятно, самое простое, если вы просто хотите иметь два Wall
экземпляра, не изучая гораздо больше о JS.
Комментарии:
1. Спасибо @Matti, я проведу тест позже, однако я надеялся, что есть способ «привязки» без создания нескольких параметров, я использую массив var для разных «стен»