0

我们有一组 javascript «模块» 组织在 «namespaces» — 根植于全局对象(窗口)的对象层次结构。

在某些情况下,我们使用一个实用程序createNs("namespace.name")(它的工作原理与 YUI 完全一样YAHOO.namespace),但是我们没有 IntelliSense。ReSharper 也无法解决此类问题。

目前,让 IntelliSense 工作的唯一方法是编写非常麻烦的东西,如下所示:

// module with no dependencies:
(function (window) {
    var ourCompany = window.ourCompany || (window.ourCompany = {});
    var components = ourCompany.components || (ourCompany.components = {});
    var emails = components.emails || (components.emails = {});
    emails.inbox = {
        checkNew: function () { }
    };
})(window);

// consumer:
(function (window) {
    window.ourCompany.components.emails.inbox.checkNew();
})(window);

另一种选择是使用jQuery.extend并不总是可用的方法:

// depends on jquery:
(function (window, $) {
    $.extend(true, window, {
        ourCompany: {
            components: {
                emails: {
                    inbox: {
                        checkNew: function () { }
                    }
                }
            }
        }
    });
})(window, jQuery);

什么是公分母解决方案?

  • 少写,

  • 有智能,

  • 有 ReSharper 的重构,

  • 没有第三方依赖。

可能吗?

谢谢!

4

1 回答 1

0

好吧,这是您的选择:

  1. 您可以编写一个 R# 插件来解析您的实用程序方法。如果你有兴趣,我可以告诉你在哪里看。

  2. 您可以尝试使用 Visual Studio Intellisense for JavaScript(ReSharper | Options -> Environment | Intellisense | General -> Limited ReSharper IntelliSense -> 打开除 JavaScript 之外的所有内容)。这只会影响 Intellisense,所有其他 ReSharper 功能将继续工作。

  3. 在 ReSharper 7.1 中,我们为 Intellisense 提供了在 JS 文件中遇到的所有标识符。也许对你来说就足够了。

  4. 如果您不使用,/// <reference path="path-to/another-script.js" />那么您可以创建一个单独的 JS 文件(不会真正包含在任何地方),代码如下

    我们的公司.components.emails = {};

于 2012-12-08T18:38:40.260 回答