如何确保使用特定参数调用我的回调函数?

问题描述 投票:0回答:2

我的代码中有一部分可以完美运行

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

这是错误的,我询问任务的正确语法。

javascript closures function-expression
2个回答
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
或其他内容。


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
      })
);
© www.soinside.com 2019 - 2024. All rights reserved.