我正在尝试在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>
附加的viewmodel包含:
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: Curiouser和curiouser ......我一直在做更多的调试。我在jquery.fancytree.js库中放了一个停止点,代码执行就在那里!更重要的是,它实际上创建了所需的element.fancytree方法,并且在调试期间长时间保持与元素的连接。麻烦的是,稍后在jquery初始化中发生的事情是从元素中删除.fancytree()方法,然后代码执行从jquery库中返回!
我有另一个测试html页面加载完全相同的jquery,jquery-ui和jquery.fancytree库,并且工作得很好。那肯定和Durandal有关吗?
答案 0 :(得分:1)
修正了它!这与requirejs重新加载jquery有关。我在这个问题上找到了答案:Make requireJs not reload jQuery if already on page
我刚补充说:
define('jquery', [], function () {
return jQuery;
});
...在我的require.js.config({...});
部分之后和define(['knockout', 'durandal/system', ... {
部分之前。
不敢相信这就这么简单......