Trigger backbone.js изменяется, когда значение не изменяется

17

Известная функция backbone.js заключается в том, что при установке данных, которые не были изменены, он не будет запускать событие изменения и не будет проходить проверки. Однако мне нужно, чтобы событие изменения срабатывало, поскольку я сохраняю ответ JSON от вызова AJAX, который хранит результаты проверки бэкэнд. Если пользователь продолжает отправлять форму, оставив одно и то же поле пустым, проверка на бэкэнд вернет тот же результат JSON, и когда я сохраню его в модели, он не инициирует событие изменения.

Несколько вещей, которые я пробовал в обратном вызове AJAX, где я задал данные в модели:

Попытка решения №1

t.model.unset('fieldErrors',{silent: true});
t.model.set({fieldErrors: JSONResponse});

Попытка решения №2

t.model.set({fieldErrors: null},{silent: true});
t.model.set({fieldErrors: JSONResponse});

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

    
задан Patrick Robert Shea O'Connor 12.04.2013 в 00:07
источник
  • Если вы не боитесь шаблона, см. ответ ScottPuleo. В противном случае вы можете переопределить метод set # Model, чтобы всегда запускать настраиваемое событие (я опубликую ответ о том, как вам интересно). –  Loamhoof 12.04.2013 в 00:29

1 ответ

27

Вручную вызовите событие изменения:

t.model.trigger('change', t.model);

или

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue);
    
ответ дан Scott Puleo 12.04.2013 в 00:27
  • Этот второй случай (случайной опции), вероятно, никогда не будет использоваться. Метод триггера - это все, что нужно здесь. Не забудьте передать необходимые параметры, так как позвоночник не сделает это для вас при ручном запуске. –  Adam Terlson 03.09.2014 в 00:31
  • Примечание: «Этот второй случай» относится к старому случаю, который с момента удаления. –  Chris 07.05.2015 в 00:42
  • @Scott Puleo Это старый вопрос, но мне было интересно, если бы вы могли объяснить, почему нам нужно передать модель в качестве второго аргумента для запуска? Когда этого не происходит, Collection._onModelEvent, который вызывается позже, не получает модель. Мне кажется, что model.trigger ('change') должно быть достаточно, чтобы перенаправить модель на это позднее событие. Вы знаете, почему это не так? (извините, если мой вопрос непонятен ...) –  arnaudrg 18.08.2015 в 01:16
  • Ну ладно, следовало бы поискать немного больше, прежде чем спрашивать. Похож на ошибку: github.com/jashkenas/backbone/issues/3717 –  arnaudrg 18.08.2015 в 01:23