2011-05-22 117 views
1

我只是想做一个简单的按钮点击。但没有任何反应上点击;-(JavascriptMVC绑定不起作用

控制器:

$.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")} 
+0

JavaScriptMVC的论坛是获取答案的地方。我不经常在这里检查。 – 2011-05-27 23:29:04

回答

0

onDocument: true表示您已将控制器声明为文档控制器,并且文档控制器在每个选择器之前添加隐式“#CONTROLLERNAME”。

所以,你的事件处理程序的定义其实是:

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

你可能没有你的页面上的#extra元素,所以它永远不会被连接,而该事件从来没有发射。我开始使用JMVC时自己犯了这个错误。

Document Controller文件的第一行会解释这一点。

我认为他们可能被废除在未来JMVC稿控制器,并且我发现我不经常使用它们。

+0

食谱例子也没有这个选择器。为什么? – fabian 2011-05-22 20:09:48

+0

在Cookbook Recipe Controller的{window}加载处理程序中,如果它尚不存在,则会创建一个ID为“recipe”的div,并且所有事件都将附加到该div。只要在页面上存在具有正确标识的元素,您的事件处理程序将被附加。 – 2011-05-22 22:47:19

0

也有“MainControllers”不选择每前加#controllername。我相信这就是你想要达到的目标。您需要将此行添加到控制器定义的静态部分:

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 
    } 
}) 
+0

不能工作。食谱例子也没有这条线。为什么? – fabian 2011-05-22 20:09:41

0

给你的链接ID或类,例如

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

然后在您的控制器中,链接注册处理程序应该看起来像

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

这应该工作。另外请注意文档控制器不知何故被弃用。您应该创建一个普通的普通控制器,然后将其附加到某个元素。