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を拡張して、受信した2番目のagrumentをimage変数で埋めるようにする必要があります。これは、直接書き込まれたimage_miniの代わりに使用されます。

このようなもの(以下のコードは間違っています)ですが、正しい構文コードがあります:

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

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

私は落ち着きを感じますが、そのようなonStateChangeで2つの変数を渡すための正しい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_changeます。data結果としてそれは内部に解決さstate_changeれ、元の関数の使用方法はあまり変わりません。

state_changeただし、この方法では、スローインなどの追加の引数をへの呼び出しに自由に渡すことができますimage_mini

于 2012-05-04T03:47:47.297 に答える
0

定義しているJSONオブジェクトの新しいアイテムとしてimage_miniをドロップしています。それはうまくいきません。マップを参照するようにしたい場合は、そのパラメーターを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 に答える