簡體   English   中英

將回調函數和參數傳遞給javascript函數

[英]passing callback function and parameters to a javascript function

我是JS的新手。 我有一個幫助程序類,它執行一些常見的服務器提取。 目前,其中一個功能如下所示:

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(???????));

我希望我的回調函數使用它在回調中收到的數據。 我怎樣才能做到這一點? 提前致謝!

你只需要傳入函數引用。 你不想通過在傳遞回調時結束它()來調用函數,而不是函數引用,回調最終會成為函數的結果(如果沒有返回它將是未定義的)。 getAvailablePlatforms: function (platform, callback) { populatePlatforms getAvailablePlatforms: function (platform, callback) {

所以你想要:

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

對於在上下文中傳遞使用ecmascript5 function.prototype.bind函數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM