1

私はJSにかなり慣れていません。サーバーへの一般的なフェッチの一部を行うヘルパー クラスがあります。現在、これらの関数の 1 つが次のようになります。

getAvailablePlatforms: function (platform) {
            var self = this;
            if (_.isUndefined(platform) || platform == '') {
                platform = "crystalproject";
            }

            $.ajax({
                url: '/api/platform/' + platform,
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    console.log("Got data");
                    self.platforms = data;
                    self.eventAggregator.trigger('getplatforms');  
                },
            });
        }

したがって、これをより柔軟にするために試みたかったのは、コールバック関数を渡すことでした。だから私はこれを試しました:

getAvailablePlatforms: function (platform, callback) {
            var self = this;
            if (_.isUndefined(platform) || platform == '') {
                platform = "crystalproject";
            }

            $.ajax({
                url: '/api/platform/' + platform,
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    console.log("Got data");
                    self.platforms = data;
                    self.eventAggregator.trigger('getplatforms');  
                    if (callback && typeof(callback) === "function") {
                        callback(data);
                    }
                },
            });
        }

私がそれをどのように呼びたいかは、次のようなものです:

var helper = new Helper();
helper.getAvailablePlatforms('', this.populatePlatforms(???????));

コールバック関数がコールバックで受信したデータを使用するようにします。どうすればそれを達成できますか?ありがとうございます!

4

1 に答える 1

3

関数参照を渡すだけです。コールバックを渡すときに終了して関数を呼び出したくない場合()は、関数参照の代わりに、コールバックが関数の結果になります (何も返されない場合は未定義になります)。populatePlatform 内部getAvailablePlatforms: function (platform, callback) {

したがって、次のようにします。

helper.getAvailablePlatforms('', this.populatePlatforms);

コンテキストで渡すには、ecmascript5 function.prototype.bind関数を使用します。

helper.getAvailablePlatforms('', this.populatePlatforms.bind(this));
于 2013-06-19T01:28:48.147 に答える