質問

私は形式で機能を持っています:

$.get_members = function() {
    var group_id = $('#gid').val();
    if($(this).val() == group_id)
        return;

    var deferr = $.Deferred();

    $.get(url)
        .done(function() {
            ...
            deferr.resolve();
        });

    return deferr.promise();
}
.

そして今質問は次のとおりです.group_id == $(this).val()の場合、状況を処理する方法は?私はただやりたいです:

var members_deferr = $.get_members();

members_deferr.done(function() {
  ...
});
.

返品値の種類を確認することですが、それほど良くないです。2番目の考えはsetTimeoutで延期したことを解決することですが、安全かどうかわかりません。

他のアイデア?

役に立ちましたか?

解決

group_idが現在選択されており、グループメンバーがある場合は、解決された修復を返す必要があります。Callback Done()がすぐに呼び出されます。戻り値を確認する必要はありません。このようなもの:

$.get_members = function() {
  var group_id = $('#gid').val();
  var deferr = $.Deferred();
  if($(this).val() == group_id) {
    deferr.resolve();
  }
  else {
    $.get(url)
        .done(function() {
            ...
            deferr.resolve();
        }); 
  }

  return deferr.promise();
}
.

他のヒント

val== group_idの場合あなたがしようとしていることはよくわかりません。これはあなたがどういう意味ですか?

$.getMembers = function() {

    if ($(this).val() == $('#gid').val())
    {
        return $.Deferred().reject().promise();
    }

    return $.get(url).then(function() {
        // ...
    }).promise();
}
.

忙しい呪文による遅い回答...

jQueryプラグインでヒントします。それがあなたが望むものなら、あなたはこのようなことをすることができます:

(function($){
    var pluginName = 'get_members';
    $.fn[pluginName] = function(url, otherValue) {
        var $this = $(this).eq(0),
            data = $this.data(pluginName);
        if(!data) {
            data = {};
            $this.data(pluginName, data);
        }
        if(otherValue === undefined || $this.val() !== otherValue) {
            if(data.jqXHR) {
                data.jqXHR.abort();
            }
            data.jqXHR = $.get(url).done(function(response, textStatus, jqXHR) {
                ...
            });
        }
        return data.jqXHR || $.Deferred().reject(pluginName + ': conditions for fetching members have not been met');
    }
})(jQuery);

//Normal usage
var promise_of_members = $("#myInputElement").get_members('http://my/url', $("#gid").val());
//or
var promise_of_members = $("#myInputElement").get_members('http://my/url', 'myComparisonString');

//Force get
var promise_of_members = $("#myInputElement").get_members('http://my/url');
.

これを書くのに必要ないくつかの設計決定が必要なので、あなたがやりたいこととあなたが持っている詳細な行動をどれだけ制御するかによって、ちょっと違う何かになるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top