我正在尝试在Durandal页面中使用fancytree。我之前已经做过,但现在似乎无法正常工作,这让我发疯。
我在$("#tree").fancytree...
行上有一个js调试停止点,在代码停止的那一点上,我加载了以下三个库:
jquery-1.12.1.js
jquery-ui-1.11.4.js
jquery.fancytree.js
但是,没有显示该元素的“ fancytree”原型方法,并且在初始化行上显示了
system.js:109 TypeError: $(...).fancytree is not a function(…)
。过去,这是由于缺少jquery-ui库引起的,但显然是在此处加载的。我想念什么?
编辑以添加更多信息。
HTML基本上不相关,因为它只是
<div id="tree"></div>
有一个附加的视图模型,其中包含:
self.attached = function (vw, prt) {
buildTree(vw);
}
和
function buildTree(view) {
// Initialize Fancytree
$("#tree").fancytree({
checkbox: true,
selectMode: 2,
source: {url: "testdata/ajax-tree-taxonomy.json", debugDelay: 1000},
toggleEffect: { effect: "drop", options: {direction: "left"}, duration: 400 },
lazyLoad: function(event, data) {
data.result = {url: "testdata/ajax-sub2.json", debugDelay: 1000};
}
});
}
我将调试停止点放在
$("#tree").fancytree({
行上,然后它已加载上述库。编辑2:
越来越好奇...我一直在做更多的调试。我在jquery.fancytree.js库中放置了一个停止点,代码执行就在那里了!更重要的是,它实际上创建了所需的element.fancytree方法,并且在调试期间会长时间保持与该元素的连接。麻烦的是,随后在jquery初始化中发生了一些事情,该事件从元素中删除了.fancytree()方法,并且在代码执行退出jquery库之前!
我有另一个测试html页面,它加载完全相同的jquery,jquery-ui和jquery.fancytree库,并且工作得很好。那一定与杜兰达尔有关吗?
最佳答案
固定它!这与requirejs重新加载jquery有关。我找到了以下问题的答案:Make requireJs not reload jQuery if already on page
我刚刚添加:
define('jquery', [], function () {
return jQuery;
});
...在我的
require.js.config({...});
部分之后和define(['knockout', 'durandal/system', ... {
部分之前。简直不敢这么简单...