0

私は最初のjQueryUIウィジェットに取り組んでいます。$ .ajaxを使用してデータをプルし、データがロードされた後に要素にデータを入力します。通常、私はajaxプルを実行し、「onSuccess」コールバック関数をその関数に渡して、ajaxプルが成功したときに実行される関数を使用します。

これが私が言っていることの本当に単純化されたバージョンです:

function doAjax(onSuccess) {
    $.ajax({
        success: function (data) {
            onSuccess(data);
        }
    });
}

doAjax(function (data) {console.log(data);});

ウィジェットファクトリを使用すると、$。ajaxの成功関数にトリガーを追加できることがわかります。ウィジェットコード内でそのトリガーを使用できますか?

このようなものは機能しますが、ベストプラクティスではないようです。

_create: function() {
    self.options.dataLoaded = function (e, data) {console.log(data);};
    this._doAjax();
},
_doAjax: function() {
    var self = this;

    $.ajax({
        success: function (data) {
            self._trigger('dataLoaded', null, data);
        }
    });
}

ここでベストプラクティスと見なされるものは何ですか?

4

1 に答える 1

2

いくつかの試行錯誤コードを実行した結果、最初のオプションが最適であると判断しました。これは、最もよく機能するように見えるコードの簡略化されたバージョンです。

_create: function() {
    var self = this;
    self._doAjax(self.doStuff);
},
_doAjax: function(onSuccess) {
    var self = this;

    $.ajax({
        context: self,
        success: function (data) {
            onSuccess.call(this, data);
            self._trigger('dataLoaded', null, data);
        }
    });
},
doStuff: function(data) {
    var self = this;

    console.log(self);
    console.log(data);
}

これにより、通常どおりにコールバックを使用でき、ウィジェットのユーザーdataLoadedは必要に応じてイベントを使用できます。$.ajax content:と組み合わせたオプションを使用すると、コールバックとして使用されたメソッド内からウィジェットを参照onSuccess.call(this,data)できるようになります。thisdoStuffonSuccess

于 2012-11-03T20:30:54.277 に答える