繁体   English   中英

Visual Studio 2010 Javascript Intellisense无法正常工作

[英]Visual Studio 2010 Javascript Intellisense not working properly

Visual Studio 2010和Javascript Intellisense有点问题。

我已经实现了一个带有“属性”的类,并希望实现一个“静态”函数,该函数在ajax请求返回Json对象之后返回该类的新实例。

像这样:

/// <reference path="jQuery/jquery-1.4.1-vsdoc.js" />
MyClass = function (options) {
    /// <summary>MyClass Description</summary>
    /// <param name="options" type="Array">Foo1 (string), Foo2(string)</param>
    /// <field name="Foo1" type="String">Foo1 Description</field>
    /// <field name="Foo2" type="String">Foo2 Description</field>

    // [...] Some Code

    // Properties
    this.Foo1 = options.Foo1;
    this.Foo2 = options.Foo2;
}

和功能:

智能感知不起作用:

MyClass.MyFunction = function () { 
    /// <summary>MyFunction Description</summary>
    /// <returns type="MyClass">MyClass</returns>

    $.ajax({
        type: 'GET',
        url: '/Foo/Bar',
        dataType: 'json',
        success: function (result) {
            return new MyClass(result);
        }
    });
}

智能工作:

MyClass.MyFunction = function () { 
    /// <summary>MyFunction Description</summary>
    /// <returns type="MyClass">MyClass</returns>

    var foo = new MyClass({'foo1': 'a', 'foo2': 'b'});
    $.ajax({
        type: 'GET',
        url: '/Foo/Bar',
        dataType: 'json',
        success: function (result) {
            foo = new MyClass(result);
            return foo;
        }
    });

    return foo;
}

当我从另一个函数调用该函数时,例如:

$(document).ready(function() {
    var foobar = MyClass.MyFunction(); // returns Object of type "MyClass"
    alert(foobar.Foo1); // At this Point, the intellisense doesn't work correct
});

我的智能不再起作用了(或不能使用两次返回),因为MyFunction的返回在ajax请求内。 如果我将return放在函数的末尾,则intellisense再次起作用。 但是在这种情况下,我有两个回报。 第一个来自函数,第二个来自ajax成功。

看来<returns...></returns>仅在return在函数末尾时才起作用。 不好,因为在ajax请求完成后,我只需要返回一个即可。

我不知道该如何处理。 希望你能帮我解决这个问题:)

无论如何,从“成功”回调内部return将无法正常工作。 它将从函数返回,但是没有什么要注意返回值,尤其是“成功”函数的返回值将不是 “ MyFunction”的返回值。

如果您要“ MyFunction”获取值并允许一些代码在其上工作,则必须将该代码传递给“ MyFunction”并在“成功”函数中调用。 因此,代替:

var thing = MyClass.MyFunction();
/*
  do stuff with "thing"
*/

您可以更改“ MyFunction”,以便执行以下操作:

MyClass.MyFunction(function(thing) {
  /*
    do stuff with "thing"
  */
});

该函数将如下所示:

MyClass.MyFunction = function (doStuff) { 
  /// <summary>MyFunction Description</summary>

  $.ajax({
    type: 'GET',
    url: '/Foo/Bar',
    dataType: 'json',
    success: function (result) {
        doStuff(new MyClass(result));
    }
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM