【问题标题】:Why am I getting a "Cannot read property 'nodeType' of null" error with Knockout JS?为什么我在使用 Knockout JS 时收到“无法读取属性 'nodeType' of null”错误?
【发布时间】:2013-02-11 22:58:04
【问题描述】:

今天是我参加 Knockout 的第一天。被它打动了。下面是我使用 knockout.js 的第一个示例代码,它显示了一个错误。

无法读取 null 的属性“nodeType”

这是我的脚本:`

   function ViewModel()  
   {  
     var self = this;  
     self.n1 = ko.observable(10);  
     self.n2 = ko.observable(10);  
     self.n3 = ko.observable(10);  
   }  
   ko.applyBindings(new ViewModel());  `

这是我的html:

<body>
<p>Number1:<input data-bind="value:n1"></input></p>
<p>Number2:<input data-bind="value:n2"></input></p>
<p>Number3:<input data-bind="value:n3"></input></p>
</body>

我想知道上述错误的原因以及如何克服它...

【问题讨论】:

    标签: javascript html data-binding mvvm knockout.js


    【解决方案1】:

    我认为 ko.applyBindings(obj);应该写在视图模型下。

    <!DOCTYPE html>
    <html>
    <head>
        <title>KO Examples</title>
        <script type='text/javascript' src='knockout-3.1.0.js'></script>
        <script type='text/javascript' src='jquery.js'></script>
        <script type='text/javascript'>
            var  obj = {
                first_name : 'Gazal Irish'
            };
    
    
        </script>
    
    </head>
    <body>
    <div>
        <p>My name : <span data-bind="text: first_name"></span>
    <p> 
    </div>
    <script type="text/javascript">
    
        ko.applyBindings(obj);
    </script>
    
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      如果你像这样设置你的代码,它会工作的。

      <body>
      <p>Number1:<input data-bind="value:n1"></p>
      <p>Number2:<input data-bind="value:n2"></p>
      <p>Number3:<input data-bind="value:n3"></p>
      <script src="knockout.js"></script>
      <script>
      
      function ViewModel() {  
         var self = this;  
         self.n1 = ko.observable(10);  
         self.n2 = ko.observable(10);  
         self.n3 = ko.observable(10);
      }  
      
      ko.applyBindings(new ViewModel());  `
      
      </script>
      </body>
      

      【讨论】:

      • HTML 是从上到下解析的。因此,如果您在页面顶部包含脚本(例如&lt;head&gt; 部分),它们可以在部分或所有页面元素准备好与之交互之前运行。还有其他方法可以做到这一点(响应 DOM 就绪事件),但将代码放在底部也是如此。
      • 另一个提示:&lt;input&gt; 元素没有结束标签。在 html 中,您只需在 XHTML 中将它们写成 &lt;input type="text"&gt;&lt;input type="text"/&gt;
      【解决方案3】:

      如果您想将&lt;script&gt; 保持在页面顶部,可以使用jQuery 的ready() 函数来延迟初始化,直到页面加载完毕。

      $(document).ready(function() {
          ko.applyBindings(new ViewModel());
      });
      

      【讨论】:

      • 我不知道它是否有效...无论如何感谢您的宝贵回答...!!!
      • 是的,它有效。我和你有同样的错误,这个页面帮助我用 $.ready() 解决它。
      猜你喜欢
      • 2015-03-20
      • 2016-11-01
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多