4

VisualStudio2010とJavascriptIntellisenseには少し問題があります。

いくつかの「プロパティ」を持つクラスを実装しましたが、Json-Objectを返すajax-requestの後にクラスの新しいインスタンスを返す「static」関数を実装したいと思います。

そのようです:

/// <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-request内にあるため、私のインテリセンスは機能しなくなりました(またはダブルリターンで機能します)。関数の最後にリターンを配置すると、インテリセンスは再び機能します。しかし、この場合、2つのリターンがあります。1つ目は関数から、2つ目はajax-successから。

リターンが関数の最後にある場合に<returns...></returns>のみ機能するようです。これは悪いことです。ajax-requestが完了したときに1回だけ戻る必要があるからです。

この問題に対処する方法がわかりません。あなたが私がこれを修正するのを手伝ってくれることを願っています:)

4

1 に答える 1

2

「成功」コールバックのreturn内部からは、とにかく機能しません。その関数から戻りますが、戻り値には何の注意も払われません。特に、「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));
    }
  });
}
于 2010-12-20T16:29:08.143 に答える