我们在«命名空间»中组织了一组javascript«modules» - 以全局对象(窗口)为根的对象层次结构。
在某些情况下,我们使用实用程序createNs("namespace.name")
(它的工作方式与YUI YAHOO.namespace
完全相同),但我们使用无智能感知。 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);
什么是共同点解决方案?
少写,
有intellisense,
有ReSharper的重构,
没有第三方依赖。
有可能吗?
谢谢!
答案 0 :(得分:0)
嗯,这是您的选择:
您可以编写R#插件来解决您的实用程序方法。如果你有兴趣,我可以告诉你在哪里看。
您可以尝试使用Visual Studio Intellisense for JavaScript(ReSharper | Options - > Environment | Intellisense | General - > Limited ReSharper IntelliSense - >打开除JavaScript之外的所有内容)。这只会影响Intellisense,所有其他ReSharper功能都将继续有效。
在ReSharper 7.1中,我们为Intellisense提供了JS文件中遇到的所有标识符。也许这对你来说已经足够了。
如果您没有使用/// <reference path="path-to/another-script.js" />
,那么您可以使用
ourCompany.components.emails = {};