Установленный вручную флажок Backbone.js срабатывает, но «нажал код» - нет

0

У меня есть страница с двумя флажками. например

<label class="checkbox" for="1">
    <input id="1" type="checkbox">
        Option#1
</label>
<label class="checkbox" for="2">
    <input id="2" type="checkbox">
        Option#2
</label>

Если я вручную щелкнуть флажок # 1 в браузере, флажок установлен (очевидно), и изменения подхватываются Backbone.

Если у меня есть образец jQuery на странице, запущенный якорем, например, который проверяет/выбирает поле "в коде", он не подбирается Backbone. В jQuery я пробовал все следующее:

$('#2').prop('checked', true, true);
$('#2').attr('checked','checked');
$('#2').trigger( "click" );
$('#2').change();

Этот флажок установлен в браузере, используя один из вышеперечисленных фрагментов, но Backbone только устанавливает флажок вручную, а не тот, который проверен "в коде", даже если они оба сделаны вместе.

Я ценю любые ответы, которые углубляют мое понимание событий на Магине!

Теги:
backbone.js

3 ответа

0

Я слишком долго тратил на это. Проблема, с которой я столкнулся, заключалась в том, что я слушал событие click на флажках:

events: {
  'click .some-checkbox-class: function() {...}
}

Я пробовал в течение нескольких часов, чтобы программно проверить этот флажок в тесте жасмина, только чтобы понять, что позвоночник так и не поднял его. (Все работало в браузере, когда я использовал его в качестве заинтересованного лица)

Я изменил его на этот, который имел тот же самый эффект, и я смог проверить его в тесте на жасмин, и позвоночник поднял его, как будто он должен...

events: {
  'change .some-checkbox-class: function() {...}
}

И в тесте на жасмин, я смог получить это, чтобы стрелять через:

view.$el.find('.some-checkbox-class').prop('checked', true).change();

0

Программное изменение проверяемого состояния флажка, похоже, не вызывает соответствующее событие изменения. Это не имеет ничего общего с Backbone и считается нормальным поведением jQuery.

Итак, подведем итог:

$('#1').prop('checked', true); - проверяет флажок

$('#1').change(); - запускает событие change для этого флажка

$('#1').prop('checked', true).change(); - проверяет флажок и запускает событие change явно

Я установил jsFiddle, который иллюстрирует ваш пример, проверьте его здесь.

  • 0
    Спасибо ... Я пытался $ ('# 1'). Prop ('флажок', правда) .change (); Хотя этот флажок установлен в jQuery, Backbone поднимает только флажок, установленный вручную.
  • 0
    Как Backbone прислушивается к change флажков? У вас должно быть что-то похожее на jsFiddle (например, events:{"change #1": "checkboxChangeHandler"} )
0

Попробовали это:

$('#2').prop('checked', true).trigger('change');
  • 0
    Спасибо ... Я попробовал это, но это не сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню