-1

右ボタンで再利用可能なHeaderオブジェクトを作成しようとしています。ボタンクリックのコールバックメソッドに問題があります。呼び出されることはありません。

私の目的:

myHeader:function(params)   
{       
    opt = {
        title: "Title",  //header tittle
        fs: PrecApp.DEFAULT_HEADER_FONTSIZE, //font size
        ignoreStack :true, //ignore stack
        height: "70", //header height
        rightButton: {
            show :false, //show right button
            background: "none", //background for right button
            text: "Button", //text for right button
            width: "auto",
            height:"auto",              
            color:"black",
            fontize:1,
            extraCss: null,
            onClick:function(){}
        }
    }
for (i in params) opt[i] = params[i];

    if (opt.rightButton.show){
        var right = $("#header .right");            
        right.click(opt.rightButton.onClick);           

    }       
}

そして私のhtmlで:

function updateLayout(){
                PrecAppComponents.myHeader({
                    title:"My Title",
                    fs:1.5,
                    height:50,
                    rightButton:{
                        show:true,
                        background:"#ffff00",
                        text:"Right",
                        width:70,
                        height:30,
                        fontsize:1.1,
                        extraCss: {"float":"left", "font-size":"0.5em"},
                        onClick: PrecAppComponents.toggleDarkOverlay(true)

                    }
}

他のすべては正常に機能しています。交換した場合

right.click(opt.rightButton.onClick);       

 right.click(function(
  console.log("clicked")
));     

正常に動作します。私は何が間違っているのですか?

4

3 に答える 3

1

onClickオプションが関数を呼び出しているようです。その呼び出しが別の関数を返さない限り、これは機能しません。

onClick: PrecAppComponents.toggleDarkOverlay(true)

次のように変更する必要があります。

onClick: function() {
  PrecAppComponents.toggleDarkOverlay(true);
}

// or with bind, perhaps

onClick: PrecAppComponents.toggleDarkOverlay.bind(PrecAppComponents, true);
于 2012-11-15T16:12:11.887 に答える
0

匿名関数でカプセル化してみてください:

right.click(function(){opt.rightButton.onClick();});       
于 2012-11-15T16:13:08.407 に答える
0

イベントハンドラーとして呼び出される関数を返さPrecAppComponents.toggleDarkOverlay(true)ないようです-すぐに実行します。使用する必要があります

function(e) {
    PrecAppComponents.toggleDarkOverlay(true);
}

また

PrecAppComponents.toggleDarkOverlay.bind(PrecAppComponents, true)
于 2012-11-15T16:16:45.413 に答える