2011-11-09 7 views
31

Tôi đang cố ghi lại mã của mình bằng cách sử dụng bộ công cụ JSDoc. Mã của tôi bắt đầu bằng cách được bao bọc bằng chức năng ẩn danh tự thực hiện. Làm thế nào trên thế giới để tôi tài liệu này? Tôi đã dành gần như cả ngày cho việc này. JS Documents sẽ không nhận ra bất kỳ thứ gì bên trong chức năng đóng ẩn danh do nó không biết phải làm gì với nó. Nó phá vỡ và không có ý kiến ​​của tôi đi qua.Làm thế nào để tài liệu các chức năng ẩn danh (đóng) với jsdoc-toolkit

Mã của tôi trông giống như thế này.

/** 
* @fileoverview BLA BLA BLA 
*/ 

/** 
* This is where I don't know what to put. 
*/ 
(function() { 
    "use strict"; 

    /** or here */ 
    var stlib = function (param, param, param) { 
     /** or here */ 
     var share = { 
      /** or here */ 
      config: { 
       button: DOM Element, 
       property: blablabla 
      }, 

      init: function() { ...some init code here} 
     }; 

     share.init(); 
    }; 

    widgets.add("share", stlib); 
}()); 

Cảm ơn bạn!

+0

Đó là vì JSDoc có đầy đủ các câu lệnh java và không phù hợp với JavaScript. Chỉ cần viết nhận xét hợp lý thay vì – Raynos

+0

Cảm ơn bạn, rjmunro. Tôi đồng ý. Tôi không nghĩ nó quá cục bộ. Tuy nhiên, tôi đã chuyển sang Docco để lấy tài liệu từ đó. jashkenas.github.com/docco/ –

Trả lời

4

Bạn có thể sử dụng @namespace với @name và @lends như thế này:

/** 
* @name MyNamespace 
* @namespace Hold all functionality 
*/ 
(function() { 
    "use strict"; 
    /** @lends MyNamespace*/ 
    var stlib = function (param, param, param) { ...All of my code...}; 
}()); 
+0

Lời xin lỗi của tôi. Điều này đã không thực sự trả lời những gì tôi đã cố gắng để làm. Tôi đã cập nhật đoạn mã với nhiều thông tin hơn. Cảm ơn bạn đã trả lời của bạn mặc dù! –

+0

Không có không gian tên trong javascript. Cấu trúc thậm chí không có ý nghĩa – Raynos

+3

@Raynos Sự khác biệt là chúng không có trong ngôn ngữ là gì? Chúng là [in] (http://code.google.com/p/jsdoc-toolkit/wiki/TagNamespace) jsdoc. Có lẽ nó không thực sự đúng ngữ nghĩa, nhưng những gì tôi đã viết, nó hoạt động. – Microfed

4

Bạn không thể tài liệu chức năng lồng nhau trực tiếp. Nhưng bạn có thể làm điều gì đó như thế này:

/** 
* @module foobar 
*/ 

/** 
* @function 
* @author Baa 
* @name hello 
* @description Output a greeting 
* @param {String} name - The name of the person to say hello 
*/ 
(function hello(name) { 
    /** 
    * @function 
    * @author Baz 
    * @inner 
    * @private 
    * @memberof module:foobar 
    * @description Check if the argument is a string (see: {@link module:foobar~hello}) 
    * @param {String} string - The string 
    * @returns {String} Returns true if string is valid, false otherwise 
    */ 
    var isString = function checkString(string) { return typeof string === 'string'; }; 
    if (isString(name)) 
     console.log('Hello ' + name + '!'); 
}('Mr. Bubbles')); 

Ở đây tôi đang thiết checkString như tinnội được mô tả (vì chức năng lồng nhau không thể được mô tả), Và sau đó tôi vượt qua trong -p để tài liệu các chức năng riêng tư. Cuối cùng, tôi thêm một liên kết đến hàm cha để tham khảo.

Tôi nghĩ rằng jsdoc là không cần thiết khó tính và cần phải được thay thế bằng một cái gì đó tốt hơn. Đó là một cổng của javadoc, vì vậy nó có rất nhiều thứ có liên quan đến Java chứ không phải JS, và ngược lại. Có các thành ngữ JS rất phổ biến, chẳng hạn như đóng cửa hoặc chức năng lồng nhau, khó hoặc không thể lập tài liệu.

Tôi luôn kiểm tra namepath và gỡ lỗi bằng cách sử dụng cờ --explain.