2012-11-01 43 views
2

我开始学习knockoutjs,并且遇到了一个错误。 Aptana编辑器在以下位置显示错误:Knockoutjs不工作

data-bind: .... 

标签的属性抱怨它是专有标签。我已经确保包含所有必需的JavaScript文件,并且我已经检查了以前的问题:knockoutjs template not working。 这里是我的代码:

<!DOCTYPE html> 
<html> 
    <head> 
     <script type='text/javascript' src='jquery-1.8.2.min.js'></script> 
     <script src='jquery.tmpl.min.js' type='text/javascript'></script> 
     <script src='knockout-2.2.0.js' type='text/javascript'></script> 
    </head> 

    <body> 
     <script> 
      function AppViewModel() { 
       this.firstName = "Bert"; 
       this.lastName = "Bertington"; 
      } 

      ko.applyBindings(new AppViewModel());  
     </script> 
     <p>First name: <strong data-bind="text: firstName"></strong></p> 
     <p>Last name: <strong data-bind="text: lastName"></strong></p> 
    </body> 
</html> 

即使忽略集锦,并希望该浏览器将显示它我还是什么也得不到了。我使用Firefox 16,但我也尝试过IE 8,但无济于事。

回答

2

将脚本标记移动到标记下方。

<body> 
    <p>First name: <strong data-bind="text: firstName"></strong></p> 
    <p>Last name: <strong data-bind="text: lastName"></strong></p> 
    <script> 
     function AppViewModel() { 
      this.firstName = "Bert"; 
      this.lastName = "Bertington"; 
     } 

     ko.applyBindings(new AppViewModel());  
    </script> 
</body> 
+0

伟大的工作,但为什么?为什么脚本应该在标记之后?我将要写的所有脚本应该如何? –

+1

在脚本执行之前DOM尚未加载。另一种选择是将其封装在[jQuery的'ready'](http://api.jquery.com/ready/)函数中。 '$(function(){ko.applyBindings(new AppViewModel());});' – sghill

+1

内嵌您标记的脚本标记与浏览器对该标记的处理同步执行,所以'sghill'指出DOM元素不是准备好当你尝试应用绑定。通过将脚本移动到底部,可以确保您定位的DOM元素可用。或者,使用jQuery'ready'回调将确保您的代码在加载DOM之前不会运行。请参阅http://knockoutjs.com/documentation/observables.html ...搜索Activating Knockout。 –

相关问题