我的代码中有一部分可以完美运行
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
,以便它用图像变量填充接收第二个参数,这将代替直接编写的image_mini
。
类似这样的东西(下面的代码是错误的),但具有正确的语法代码:
function state_change(data, working_image) {
working_image.mapster(...);
}
$("#map_full").mapster(
$.extend({}, options, {
onStateChange: state_change, image_mini
})
);
我觉得我很蹩脚,但我还没有找到在这样的 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
这是错误的,我询问任务的正确语法。
它可能不那么漂亮,但你可以使用以下方法来做到这一点:
$.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
或其他内容。
您将 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
})
);