1

一些背景知识,跳到第二段来回答问题。我已经尝试过很多编辑器,比如您的典型开发人员,但在 Homesite/ColdFusion Studio 被吸入 Dreamweaver 之前,我仍然最喜欢它,我相信你们中的大多数人都会同意我的观点,是的……Dreamweaver。无论如何,我一直在运行 Sublime Text 2,没关系,但我觉得我需要更多的 IDE 而不是文本编辑器。为此,我已经使用 NetBeans 几个月了。我开始喜欢它了。在家里,我使用带有 TextMate 和 Coda 的 Mac,但我不介意完全迁移到 NetBeans,但是有一些问题困扰着我。最值得注意的是,它的 XSL 编辑很烦人,原因有几个,其次是我一直遇到的这个 JavaScript 问题。

我喜欢使用 ctrl+click 方法等来跳转 JavaScript 文件的能力,alt+back 向后移动并能够在导航器中查看方法和类的轮廓。但是我的问题是,在我的 Javascript 文件中,NetBeans 似乎无法弄清楚我的类及其方法。我使用一种模式来编写对我来说必不可少的单例类。我写这样的类如下:

// create class to contain code for this page
var FieldMgmt = function() {

    // vars local to the class
    var Fields = {}; // Store the form fields of the class

    return {

        // startup method
        init: function() {
            // initialize properties
            console.log('field management intialized');

            // capture the fields
            this.Fields = Fields = {
                field1: $('select[name=field1]') // field One
                ,field2: $('select[name=field2]') // field Two
                ,field3: $('select[name=field3]') // field Three
            };

            this.initEvents(); // setup events

        }

        // initialize events
        ,initEvents: function(){

        }


        // method 1
        ,method1: function(arg1, arg2){

        }

        // method 2
        ,method2: function(arg1, arg2){

        }

    }; // end return of FieldMgmt

}(); // end FieldMgmt

// start the code for this page
$(document).ready( function(doc){ FieldMgmt.init(); } );

下面是这个文件在我的导航器中显示的图片: 在此处输入图像描述

如您所见,我的方法都没有出现在导航器中,例如initEvents, method1,method2等。 ctrl+click-ing 方法调用也不会转到方法声明。所以 NetBeans 只是不知道这是一个类。我之前在其他编辑器中遇到过类似的问题,例如 NotePad++,我能够通过修改用于解析文件的正则表达式来让编辑器找出我的文件。

没有这个功能我可以生存,但如果我可以让它工作,那么这将是我选择的编辑器,因为这些文件可能会变得相当大,并且能够查看所有方法并通过 ctrl+click-ing 快速跳转文件,等会很棒。

我正在使用 NetBeans 7.3,并且在 Windows Server 2003 上将所有内容更新到今天的最新版本。任何帮助将不胜感激。无论如何,我是否可以修改 NetBeans 以使其了解我的方法?有这个插件吗?提前致谢。

4

3 回答 3

1

在您的示例代码中,您返回一个闭包,该闭包保留一个名为Fields“private”的变量,但您在 init 中做的第一件事是通过声明 this.Fields=Fields 公开它。通过发布的示例代码,您不妨将 FieldMgmt 声明为对象文字并让 NetBeans 识别它以使其属性显示在导航器中。

var FieldMgmt = {
    init: function() {
    }
    ,initEvents: function(){
    }
    ,method1: function(arg1, arg2){
    }
    ,method2: function(arg1, arg2){
    }
};
于 2013-07-04T03:12:32.937 回答
1

感谢@HMR 的回答。它让我走上了正确的道路。我现在发布这个,以便其他使用我提到的编码风格的人可以有一个示例,说明如何修改他们的代码以显示在导航器中,而不会改变它的行为方式或失去以这种方式构建代码的优势。所以最终的结果是这样的:

// create class to contain code for this page    
var FieldMgmt;

    (function(){

        // vars local to this closure
        var Fields = {}; // Store the form fields of the class

        FieldMgmt = {

            // startup method
            init: function() {
                // initialize properties
                console.log('field management intialized');

                // capture the fields
                this.Fields = Fields = {
                    field1: $('select[name=field1]') // field One
                    ,field2: $('select[name=field2]') // field Two
                    ,field3: $('select[name=field3]') // field Three
                };

                this.initEvents(); // setup events

            }

            // initialize events
            ,initEvents: function(){
            }


            // method 1
            ,method1: function(arg1, arg2){

            }

            // method 2
            ,method2: function(arg1, arg2){

            }

        }; // end FieldMgmt

    })(); // end closure

    // start the code for this page
    $(document).ready( function(doc){ FieldMgmt.init(); } );

导航器现在显示方法和属性: 在此处输入图像描述

希望有帮助。

于 2013-07-04T07:03:29.567 回答
-1

它适用于当前版本的 Netbeans 8.1。

于 2016-04-08T10:33:17.383 回答