문제

Form에서 기능이 있습니다.

$.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() {
  ...
});
.

하나의 아이디어는 반환 된 값의 유형을 확인하는 것입니다. 그러나 그별로 좋지 않습니다.두 번째 아이디어는 setTimeout에서 이연 된 지연을 해결하는 것입니다. 그러나 나는 그것이 안전하다는 것을 모른다.

다른 아이디어?

도움이 되었습니까?

해결책

group_id가 현재 선택되어 있고 그룹 구성원이있는 경우 해결 된 연기를 반환해야합니다.콜백 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