Visual Studio 2010 Javascript Intellisense не работает должным образом - PullRequest
4 голосов
/ 20 декабря 2010

Существует небольшая проблема с Visual Studio 2010 и Javascript Intellisense.

Я реализовал класс с некоторыми «Свойствами» и хочу реализовать «статическую» функцию, которая возвращает новый экземпляр класса после ajax-запроса, который возвращает Json-Object.

Вот так:

/// <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;
}

И функция:

intellisense не работает:

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);
        }
    });
}

intellisense работает:

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
});

мой intellisense больше не работает (или работает с двойным возвратом), потому что возврат MyFunction находится в ajax-запросе. Если я помещу возврат в конец функции, intellisense снова работает. Но в этом случае у меня есть два возврата. Первый из функции, а второй из ajax-success.

Кажется, что <returns...></returns> работает только тогда, когда возврат находится в конце функции. Это плохо, потому что мне просто нужно одно возвращение, когда ajax-запрос завершен.

Я не знаю, как справиться с этой проблемой. Надеюсь, вы можете помочь мне исправить это:)

1 Ответ

2 голосов
/ 20 декабря 2010

return изнутри обратного вызова «success» все равно не будет работать. Из будет возвращено значение , но ничто не будет обращать внимания на возвращаемое значение, и, в частности, возвращаемое значение из функции «success» будет не возвращаемым от "MyFunction".

Если вы хотите, чтобы «MyFunction» извлекала значение и позволяла некоторому коду работать с ним, тогда этот код нужно будет передать в «MyFunction» и вызвать в функции «success». Таким образом, вместо:

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));
    }
  });
}
...