我的代码部分完美无缺
var image_mini = $('#map_mini');
var image_full = $('#map_full');
function state_change(data) {
// This is just part of code which show idea
image_mini.mapster(data.state);
}
// This is full block of code, works correct
$("#map_full").mapster(
$.extend({}, options, {
onStateChange: state_change
})
);
现在我需要增强函数state_change,以便用图像变量填充第二个agrument,这将使用直接写入的image_mini。
像这样(下面的代码是错误的),但是使用CORRECT语法代码:
function state_change(data, working_image) {
working_image.mapster(...);
}
$("#map_full").mapster(
$.extend({}, options, {
onStateChange: state_change, image_mini
})
);
我觉得我很懒,但我没有找到正确的sintax的例子,因为在这样的onStateChange中传递了两个变量......我尝试了一些想法,但它没有正常工作。 请帮忙!
============================== 稍后补充:
看起来我的想法没有被正确理解,所以我写了更多的代码:
var image_mini = $('#map_mini');
var image_full = $('#map_full');
function state_change(data, working_image) {
working_image.mapster(data.state);
}
$("#map_full").mapster(
$.extend({}, options, {
onStateChange: state_change, image_mini
})
);
$("#map_mini").mapster(
$.extend({}, options, {
onStateChange: state_change, image_full
})
);
这是我想要的想法:两个图像都必须交叉,因此两个图像上的变化都会显示出来。
onStateChange: state_change, image_full
这是错误的,我询问该任务的正确语法。
答案 0 :(得分:1)
它可能不那么漂亮,但您可以使用以下方式执行此操作:
$.extend({}, options, {
onStateChange : function (e) {
state_change(e, image_mini);
}
})
要解释一下,您的第一个版本的代码如下所示:
function state_change(data) {
// ...
}
// ...
$.extend({}, options, {
onStateChange : state_change
})
这里发生的事情是,只要onStateChange
触发,它就会调用state_change
函数。如果这遵循一般的jQuery说法,则该函数将jQuery事件对象作为函数的第一个参数传递。在这种情况下,该事件对象将在data
函数声明中解析为state_change
参数。
我上面的代码遵循相同的逻辑:
onStateChange : function (e) {
}
因此,当onStateChange
触发时,它将调用该匿名函数,并将事件对象作为第一个参数传递。这将在处理函数内解析为e
。因此:
onStateChange : function (e) {
state_change(e, image_mini);
}
...对事件对象执行大部分相同的操作。触发onStateChange
事件时,处理程序将事件对象作为e
获取,然后将其传递给state_change
的调用。因此,data
会在state_change
内解析,并且不会更改您使用原始函数的方式。
但是,通过这种方式,我们可以自由地将其他参数传入state_change
的调用,例如投入image_mini
或其他任何内容。
答案 1 :(得分:0)
您正在将image_mini作为您正在定义的JSON对象中的新项目放入。那不行。如果你想让它引用地图,你应该能够将该参数移动到state_change函数的第一行
因为jQuery要对问题做一个基本的函数调用,你应该有这样的东西:
function state_change(data) {
var image_mini = $("#mapMini");
fullStateChange( data, image_mini );
}
function fullStateChange( data, image_mini ) {
// Do stuffs here
// This is just part of code which show idea
image_mini.mapster(data.state);
}
// This is full block of code, works correct
$("#map_full").mapster(
$.extend({}, options, {
onStateChange: state_change
})
);