1

I'm using a web service to populate a selection list and I now need to do the same for a number of selection lists ideally using the same method to try and limit the amount of code. Here's the method I use to make my web service call:

function GetColourReferences(self) {
    $.ajax({
        async: false,
        cache: false,
        type: 'GET',
        url: '/GetColourReferences',
        success: function (data) {
            self.colourReferences(data);
        }
    });
}

I've tried something similar to the following but I can't get it to work - is it even possible?

function GetReferences(self, list, refUrl) {
    $.ajax({
        async: false,
        cache: false,
        type: 'GET',
        url: refUrl,
        success: function (data) {
            list(data);
        }
    });
}

Here's how I'd call it (I'm using Knockout):

GetReferences(self, self.colourReferences, '/GetColourReferences');

Thanks for looking :)

4

1 に答える 1

0

1)言い訳が他の人からのヒントに耳を傾けるなら、特にバックエンドの処理が遅い場合やUIの要件が厄介な場合は、同期呼び出しを絶対に使用しないでください。

2)クロージャを整理し、オブジェクトのメソッドのスコープを設定する方法を学びます。問題を修正しますが、私は親切にあなたを正しい方向に向けます。

3)これは、関数への参照を渡すだけで機能せず、オブジェクトのメソッドへの参照を渡さないため、巧妙に自己と呼ばれます(WTFはセマンティックについて聞いたことがあります)その脇のリストは、オブジェクトのスコープを失った関数であり、ここに問題があります!

function GetReferences(self, list, refUrl) {
    $.ajax({
        async: false,
        cache: false,
        type: 'GET',
        url: refUrl,
        success: function (data) {
            list.call(self, data);
        }
    });
}

お役に立てば幸いです。

于 2013-02-10T12:53:11.997 に答える