javascript错误“不是函数...”但库已加载

时间:2016-07-06 10:18:47

标签: javascript jquery durandal fancytree

我正在尝试在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有关吗?

1 个答案:

答案 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', ... {部分之前。

不敢相信这就这么简单......