0

ajax呼び出しで情報を取得するセットアップがあり、その情報の一部をすぐに別の呼び出しに使用してから、いくつかのフィールドに入力します。

問題は、匿名関数を作成して を呼び出せるようにする方法がわからないことですthis.plantName

現在、 の値はthis.plantNameですundefined

右中括弧が抜けていることは承知していますが、混乱を招くので並べようとはしませんので、右中括弧の抜けは無視してください

TabLinks.prototype.plantName = '';

TabLinks.prototype.init = function() {
    this.updateTab('PlantDropDown', 'retrievePlants', 'retrieveAllPlants', 'tab3', function() { return this.plantName; });
};

function TabLinks() {
    this.updateTab = function(entityname, wsbyid, webservicename, parentContainer, defaultValue) {
        $("#" + parentContainer + "link").bind('click', function() {
            $.ajax({
                type: "POST",
...
                success: function(result) {
                    myData = JSON.parse(result.d);
                    $.ajax({
                        type: "POST",
...
                        success: function(result2) {
...
                                    myelem.value = JHEUtilities.testIsValidObject(defaultValue) ?
                                    defaultValue() :
                                    '';

更新: これが機能した解決策です。関数の2つの戻り値に気づきませんでした:

this.updateTab('PlantDropDown', 'retrievePlants', 'retrieveAllPlants', 'tab3',
function() {
    var app = this;
    return function() {
        return function() {
            return app.plantName;
        }
    }()
}
);

だから私はそれを次のように呼ばなければなりませんでした: defaultValue()();

4

1 に答える 1

0

これを回避する方法をプログラムする方法は、キャプチャーされた変数のスコープ内の関数からクロージャーが返されるようにすることです。そのようなもの:

function foo(){
    var myFoo = 1;
    return function (){return function() { myFoo += 1; return myFoo }}()
} //                                                                  ^^ 
于 2009-11-01T22:36:33.540 に答える