我正在尝试在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', ... {部分之前。

简直不敢这么简单...

10-04 17:04