Jquery - выполнить обратный вызов после добавления

Я закончил создание базового фрагмента и сделал все фрагменты в моем приложении расширением

public class BaseFragment extends Fragment {

    private boolean mStateSaved;

    @CallSuper
    @Override
    public void onSaveInstanceState(Bundle outState) {
        mStateSaved = true;
        super.onSaveInstanceState(outState);
    }

    /**
     * Version of {@link #show(FragmentManager, String)} that no-ops when an IllegalStateException
     * would otherwise occur.
     */
    public void showAllowingStateLoss(FragmentManager manager, String tag) {
        // API 26 added this convenient method
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (manager.isStateSaved()) {
                return;
            }
        }

        if (mStateSaved) {
            return;
        }

        show(manager, tag);
    }
}

Тогда, когда я пытаюсь показать фрагмент, я использую showAllowingStateLoss вместо show

следующим образом:

MyFragment.newInstance()
.showAllowingStateLoss(getFragmentManager(), MY_FRAGMENT.TAG);

Я подошел к этому решению из этого PR: https://github.com/googlesamples/easypermissions/pull/170/files

30
задан user342391 24 June 2010 в 21:24
поделиться

2 ответа

jQuery's .each() принимает функцию обратного вызова и применяет ее к каждому элементу в объекте jQuery.

Представьте себе что-то вроде этого:

$('a.ui-icon-cart').click(function(){
  $(this).closest('li').clone().appendTo('#cart ul').each(function() {
    $(this).find('h5').remove(); 
    $(this).find('img').css({'height':'40px', 'width':'40px'});
    $(this).find('li').css({'height':'60px', 'width':'40px'});
  });
});

Вы также можете просто сохранить результат и работать с ним вместо этого:

$('a.ui-icon-cart').click(function(){
  var $new = $(this).closest('li').clone().appendTo('#cart ul')
  $new.find('h5').remove(); 
  $new.find('img').css({'height':'40px', 'width':'40px'});
  $new.find('li').css({'height':'60px', 'width':'40px'});
});

Я бы также предложил, чтобы вместо мофирования CSS, как это, вы просто добавили класс к клонированному li, как это:

$(this).closest('li').clone().addClass("new-item").appendTo('#cart ul');

Затем установите некоторые стили, например:

.new-item img, .new-item li { height: 40px; width: 40px; }
.new-item h5 { display: none }
26
ответ дан 28 November 2019 в 00:06
поделиться

Вы можете просто продолжить цепочку дальнейших операций через точку с запятой.

$(this).closest('li').clone().appendTo('#cart ul').addClass('busy').fade('fast');

и т.д.

4
ответ дан 28 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: