2013-01-22 33 views
1

我有一个主页面,我有所有的脚本引用,并在体内我有一个duv容器,它有模板数据绑定和我的HTM正在被绑在那里。淘汰赛(模板绑定):JavaScript(JQuery)功能不会从模板内部调用

问题是由Jquery控制的我的功能无法正常工作。 例如日期选择器工作时,我把它放在引用JavaScript的主页面,但不能在我的htm中绑定到模板。

所有的库都得到正确加载,但我的jQuery功能无法正常工作时,它的模板内部调用。

例如 主页:

<script src="Scripts/jquery.js" type="text/javascript"></script> 
<script src="Scripts/jquery.qtip.js"></script> 
<script src="Scripts/foundation.min.js"></script> 
<script src="Scripts/jquery.tablesorter.js"></script> 
<script src="Scripts/jquery-ui.js"></script> 
<script src="Scripts/languageswitcher.js"></script> 

<div id="Container" ua-app-id="topVm" data-bind='template: {name: pageModel, data: pageVM }'>     
</div> 
<!-- Initialize JS Plugins --> 
<script src="Scripts/app.js"></script> 

现在我的观点得到加载在运行时的主要页面。在我看来,我有一个日期选择器,它不起作用。当我把它放在主页面,它工作正常。

回答

0

我认为这是因为你的jQuery代码在你的模板呈现之前运行。您可以使用模板绑定中提供的afterRender回调来启用datepicker。请参阅documentation了解更多信息和示例。

但是,一个更好的方法来完成这一点,是创建一个自定义绑定。事情是这样的:

ko.bindingHandlers.datepicker = { 
    init: function(element){ 
     $(element).datepicker(); 
    }, 
    update: function(element) { 
     $(element).datepicker('refresh'); 
    } 
}; 

然后你就可以使文本输入到一个datepicker通过这样做:

<input type="text" data-bind="datepicker:true" /> 

了解更多关于自定义绑定here

+0

可以参考我的整个定制JavaScript库捆绑。例如,在init函数()中,我可以调用完整的库。或者,如果我可以在我的主模板上做一个事件绑定? 我在问这是因为我的函数是跨库传播的,并且调用一切在自定义绑定中没有任何意义。 因此,一旦模板被加载,如果我可以重新调用这些库,它会是一种处理事物的好方法吗? – Aditya

+0

对不起,但我不明白你的问题!你能给个例子吗? – aaberg

+0

问题来自我的页面,它使用的是knockout,它没有从jquery.qtip.js中识别qtip的方法。实际的问题是它在foundation.min.js之前加载。我改变了顺序,它开始正常工作。你的日期选择器解决方案工作,谢谢你。刚开始学习淘汰赛,所以我的问题可能听起来很愚蠢。 – Aditya