gpt4 book ai didi

javascript - 在命名空间内时在 VS2010 中 knockout 智能感知

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:38 24 4
gpt4 key购买 nike

我有一个包含我的 knockout viewModel 的 javascript 文件。我添加了对 knockout 调试文件的引用,但智能感知仅在我位于命名空间花括号之外时才有效:

/// <reference path="knockout-2.0.0.debug.js" />

// YES! I get intellisense here :-)

(function (window, $, ko, undefined) {
// ... lots of js
// NO intellisense in here :-(

})(window, jQuery, ko);

我的命名空间签名中的 ko 似乎“隐藏”了真正的 ko 命名空间。 除了将我的 namespace 签名更改为:是否有解决此问题的方法

(function (window, $, myKo, undefined) {

(也许我遗漏了一些命名空间?我是否需要将 ko 传递到我的命名空间中?)

最佳答案

Intellisense 不够聪明,无法跟随引用。可以说你不需要像这样将引用注入(inject)你的“命名空间”。我认为它甚至不是命名空间,它只是一个闭包。考虑到正常的用例,命名空间是一堆相关代码的全局容器。应用程序可能在全局范围内有一个引用,这将被视为应用程序的命名空间。其他库(如 jQuery)将在全局范围内注册自己的值,这可能被视为命名空间。在其他情况下,您可以将整个范围包装在一个闭包中,在闭包中注册 namespace ,这样您就永远不需要触及全局范围。

不过,我明白为什么您可能想要将引用注入(inject)到您的函数中。这种遵循接口(interface)模式,因此您可以将这些变量替换为模拟版本。不幸的是,我不认为你可以推断出对 Intellisense 的引用,并且出于同样的原因(即你可以用任何东西交换它)它不能准确地告诉这些对象包含什么。

在静态类型的世界中,我们实际上定义了接口(interface)对象,这允许 Intellisense 反射(reflect)注入(inject)的引用,断言它们至少具有在接口(interface)上定义的方法。

我认为您真正必须保留 Intellisense 的唯一选择是引用这些库定义的全局引用。

更新

看起来 Microsoft 实际上已经使用类型注释来允许您显式引用函数参数的类型。我用 jQuery 测试了这个隐含引用的版本

/// <reference path="jquery-1.6.2-vsdoc.js" />

(function ($) {
/// <param name="$" type="jQuery">
/// A rererence to jQuery
/// </param>



})(jQuery);

jQuery 智能感知版本声明了 jQuery 的返回类型。假设 Knockout 具有定义类型的智能感知,您可以用相同的方式注释您的函数。一般来说,我认为你可以像这样声明一个对象类型:

var someObject = (function() {
/// <returns type="someObject" />

// implementation here, returning object
})();

function (a) {
/// <summary>
/// This function requires a to be a reference to a someObject type
/// </summary>
/// <param name="param" type="someObject">
/// A reference to a someObject type
/// </param>
/// <returns type="String" />

// we now have intellisense on a, treating it as someObject
}

因此,如果您准备完成添加注释的过程,您可以让 Intellisense 工作。

关于javascript - 在命名空间内时在 VS2010 中 knockout 智能感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com