0

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

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 的 insted。

像这样(下面的代码是错误的),但使用正确的语法代码:

function state_change(data, working_image) {  
  working_image.mapster(...);
}

$("#map_full").mapster(
     $.extend({}, options, {
         onStateChange: state_change, image_mini
     })
);

我觉得我更笨拙,但我还没有找到在这样的 onStateChange 中传递两个变量的正确 sintax 的例子......我尝试了一些想法,但它没有正常工作。请帮忙!

=============================== 稍后添加:

看起来我的想法没有被正确理解,所以我写了更多代码:

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

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

4

2 回答 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_changedata结果将在内部解决state_change,并且不会改变您使用原始功能的方式。

然而,通过这种方式,我们可以自由地将额外的参数传递到对 的调用中state_change,比如 throw inimage_mini或其他什么。

于 2012-05-04T03:47:47.297 回答
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
      })
);
于 2012-05-04T03:09:18.457 回答