backbone js до и после событий сохранения

#javascript #backbone.js

#javascript #backbone.js

Вопрос:

Нам нужно иметь возможность обрабатывать события сохранения до и после из backbone.

В принципе, когда у нас происходит загрузка сохранений, мы хотели бы показать сообщение «Сохранение …». Не уверен, как Backbine обрабатывает пакеты сохранений, но если есть очередь, которую мы хотели бы иметь возможность показывать до обработки пакета, а затем удалять после его завершения.

Есть ли что-нибудь подобное в Backbone?

Ответ №1:

Перед вызовом save просто покажите свое сообщение. Итак, есть предыдущий случай.

Что касается after, вы можете передать функцию success . Метод сохранения принимает 2 необязательных параметра. Единственное предостережение заключается в том, что первыми всегда должны быть атрибуты.

 yourModel.save({
    attr1: attr1,
    attr2: attr2
},
{
    success: function(model, response)
    {
        //do whatever
    }
});
  

Комментарии:

1. это грязно, так как нам придется делать это везде, где мы вызываем save . Кроме того, это не подходит для коллекций: (

2. Вы можете абстрагировать это поведение в mixin (хеш-объект с включенными функциями) и включить его в представления.

3. Да, я никогда не говорил, что считаю это красивым. Хотелось бы, чтобы был простой способ сказать, просто используйте существующие атрибуты моделей. К сожалению, нет способа передать функцию успеха для сохранения без предварительной передачи чего-либо в параметр attributes .

4. полностью — мы взломали его в конце, просто поместив сообщение по умолчанию на 4 секунды. неприятно. подойдет для демонстрации 😉

Ответ №2:

Как насчет переопределения Backbone.Model.save ? Быстрая реализация:

 Backbone.Model._amountOfModelsSaving = 0;
Backbone.Model._save = Backbone.Model.save;
Backbone.Model.save = function() {
    if ( Backbone.Model._amountOfModelsSaving === 0 ) {
        // Show the message
    }

    Backbone.Model._amountOfModelsSaving  ;
    var request = Backbone.Model._save.apply( this, arguments );
    request.always( function() {
        Backbone.Model._amountOfModelsSaving--;
        if ( Backbone.Model._amountOfModelsSaving === 0 ) {
            // Hide the message
        }
    });

    return request;
}
  

Комментарии:

1. извините, что звучу глупо, но как я на самом деле это сделаю? Я вообще не знаком с bb — это код, который я унаследовал

2. Ну, если вы поместите это в файл, который загружается сразу после Backbone, он заменит (ну, на самом деле «прокси для») исходную функцию сохранения.