1

簡単なボタンクリックをしたいだけです。しかし、クリックしても何も起こりません;-(

コントローラ:

$.Controller.extend('Cookbook.Controllers.Extra',
{
    onDocument: true
},
{
    "{window} load": function() {
        console.info("loaded");
    },
    'click': function( el ) {
        alert("click");
    }
});

Extra.html (エントリーポイント)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
    <head>
        <title>Test</title>
    </head>
    <body>
        <a href="#" >click here</a>
        <script type='text/javascript' src='../steal/steal.js?extra,development'></script>
    </body>
</html>

アップデート:

このイベントは機能しています。しかし、クリックリスナーではありません;-(

 "{window} resize" : function(window, ev){alert("test")}
4

3 に答える 3

0

これonDocument: trueは、コントローラーをドキュメント コントローラーとして宣言したことを意味し、ドキュメント コントローラーはすべてのセレクターの前に暗黙の '#CONTROLLERNAME' を追加します。

したがって、イベントハンドラーの定義は実際には次のとおりです。

'#extra click': function( el ) {
    alert("click");
}

ページに要素がない可能性があるため、#extra要素が添付されることはなく、イベントが発生することもありません。JMVCを使い始めたとき、私は自分でこの間違いを犯しました。

Document Controllerドキュメントの最初の行で、これについて説明しています。

将来の JMVC リリースで Document Controller を廃止する可能性があると思いますが、あまり頻繁には使用していません。

于 2011-05-22T17:54:44.873 に答える
0

たとえば、リンクに ID またはクラスを指定します。

<a href="javascript:;" id="myLink">Click</a>

次に、コントローラーで、リンク登録ハンドラーは次のようになります

'#myLink click': function(){
    //...
 }

これはうまくいくはずです。また、ドキュメント コントローラーは非推奨になっていることにも注意してください。プレーンな通常のコントローラーを作成してから、それをいくつかの要素にアタッチする必要があります。

于 2012-10-05T19:33:48.840 に答える
0

すべてのセレクターの前に #controllername を追加しない「MainControllers」もあります。それがあなたが達成しようとしていることだと思います。次の行をコントローラー定義の静的部分に追加する必要があります。

hasActiveElement : document.activeElement || false

これにより、コントローラーは次のようになります。

$.Controller.extend("MainController",{
  hasActiveElement : document.activeElement || false
},{
  focus : function(el){
     if(!this.Class.hasActiveElement)
         document.activeElement = el[0] //tracks active element
  }
})
于 2011-05-22T17:58:25.813 に答える