У меня есть страница с двумя флажками. например
<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 только устанавливает флажок вручную, а не тот, который проверен "в коде", даже если они оба сделаны вместе.
Я ценю любые ответы, которые углубляют мое понимание событий на Магине!
Я слишком долго тратил на это. Проблема, с которой я столкнулся, заключалась в том, что я слушал событие click на флажках:
events: {
'click .some-checkbox-class: function() {...}
}
Я пробовал в течение нескольких часов, чтобы программно проверить этот флажок в тесте жасмина, только чтобы понять, что позвоночник так и не поднял его. (Все работало в браузере, когда я использовал его в качестве заинтересованного лица)
Я изменил его на этот, который имел тот же самый эффект, и я смог проверить его в тесте на жасмин, и позвоночник поднял его, как будто он должен...
events: {
'change .some-checkbox-class: function() {...}
}
И в тесте на жасмин, я смог получить это, чтобы стрелять через:
view.$el.find('.some-checkbox-class').prop('checked', true).change();
Программное изменение проверяемого состояния флажка, похоже, не вызывает соответствующее событие изменения. Это не имеет ничего общего с Backbone и считается нормальным поведением jQuery.
Итак, подведем итог:
$('#1').prop('checked', true);
- проверяет флажок
$('#1').change();
- запускает событие change
для этого флажка
$('#1').prop('checked', true).change();
- проверяет флажок и запускает событие change
явно
Я установил jsFiddle, который иллюстрирует ваш пример, проверьте его здесь.
Попробовали это:
$('#2').prop('checked', true).trigger('change');
change
флажков? У вас должно быть что-то похожее на jsFiddle (например,events:{"change #1": "checkboxChangeHandler"}
)