0
zoom: function ( element, scale ){.....},
init: function() {
    $("#book div img").live('dblclick', function() {
       ...
       $( "#slider" ).slider({
       ...
          slide: function( event, ui ) {
             //call function here
             zoom (element,ui.value);
          }
       });
    });
},

ズーム機能とメイン機能の2つの機能があります。main 関数は zoom 関数を呼び出して作業を実行しますが、同じレベルではないため、ブラウザーは undefined function 'zoom' のエラーを返します。これを修正するにはどうすればよいですか (slide:function 内でズームを呼び出すことができます)?

4

3 に答える 3

2

thisオブジェクトへの参照を関数の最も外側のスコープに格納します。次にthis.zoom()、コールバック内で呼び出します。

zoom: function ( element, scale ){.....},
init: function() {
    // store a reference to the object these functions are being added to
    var that = this; 

    $("#book div img").live('dblclick', function() {
       ...
       $( "#slider" ).slider({
       ...
          slide: function( event, ui ) {
             // use the var you made above to call zoom
             that.zoom (element,ui.value);
          }
       });
    });
},

簡単な例: http://jsfiddle.net/u5ZL3/

于 2012-12-11T02:34:30.863 に答える
0

恥知らずに: JavaScript で名前空間を宣言するにはどうすればよいですか?

//Public Method
skillet.fry = function() {
    var oliveOil;

    addItem( "\t\n Butter \n\t" );
    addItem( oliveOil );
    console.log( "Frying " + skillet.ingredient );
};

//Private Method
function addItem( item ) {
    if ( item !== undefined ) {
        console.log( "Adding " + $.trim(item) );
    }
} 
于 2012-12-11T02:34:49.980 に答える
0

クラスが Bob と呼ばれる場合、次のように関数を呼び出すことができます

Bob.zoom (element,ui.value);

他の解決策は、私が信じているクラス名を呼び出すよりもいくつかの利点があるが、より多くのコードが必要な「this」を使用することです。

于 2012-12-11T02:52:56.107 に答える