2017-08-04 89 views
0

我对淘汰js相当陌生,官方网站上维护的文档不提供完整的html文件。所以我最终编写了自己的脚本标签。当我创建html标记时,它没有按预期工作。然而,只是改变脚本标签的位置使其工作。KnockOut js脚本标记不适用数据绑定

我的问题是,当脚本标记放在最上方时,函数在html body元素中被调用之前可用。即使它没有数据绑定,但将脚本放置在底部就可以解决它。这是如何通过重新排序脚本标签的位置来实现的?有人可以提供必须提供的东西的顺序吗?据我所知,很多人都喜欢使用脚本,以便DOM完全准备就绪并考虑速度。

我下面的代码:

  1. 没有数据绑定。

<html> 
 
<head> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 
</head> 
 
<body> 
 
<script type="text/javascript"> 
 
var myViewModel = {personName:'Bob', personAge:31}; 
 
ko.applyBindings(myViewModel); 
 
</script> 
 

 
The name is <span data-bind="text: personName"></span> 
 

 
</body> 
 
</html>

  • 作品
  • <html> 
     
    <head> 
     
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
     
    </head> 
     
    <body> 
     
    The name is <span data-bind="text: personName"></span> 
     
    <script type="text/javascript"> 
     
    var myViewModel = {personName:'Bob', personAge:31}; 
     
    ko.applyBindings(myViewModel); 
     
    </script> 
     
    
     
    </body> 
     
    </html>

    回答

    4

    ko.applyBindings GE称为knockout的ts在文档中搜索任何数据绑定标签并应用适当的绑定。因此,在调用ko.applyBindings之前,文档和任何数据绑定标签必须已经加载,否则淘汰赛将找不到任何要绑定的内容。

    你有几个是工作选择:

    1. 移动applyBindings到任何数据结合已经到位由它被调用时该文件的底部。
    2. 将回调函数applyBindings包装在回调函数中,以便它可以在任何地方定义,但将等待执行,直到文档加载完成。为此,您可以使用jQuery的$(document).ready(),或者如果您没有jQuery,请参阅此SO question以获取其他等效选项