Есть ли способ отговорить наблюдателя - программирование
Подтвердить что ты не робот

Есть ли способ отговорить наблюдателя

У меня есть наблюдатель в контроллере, который сохраняет объект по мере внесения изменений. Проблема в том, что это слишком часто.

changed: ( ->
  #save code goes here 
).observes("description")

Я думаю что-то вроде http://underscorejs.org/#debounce требуется?

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

Любая помощь будет большой, я пытаюсь обернуть голову вокруг ember.

4b9b3361

Ответ 1

Из Ember 1.0.0 вы можете получить отключенный наблюдатель в любом представлении или объекте, обернув вызов debounce внутри другой функции, которая наблюдается. Ember.run.debounce не возвращает функцию, а вместо этого добавляет дескриптор функции в словарь. Каждое последующее время Ember.run.debounce вызывается с помощью этого дескриптора функции, он проверяет словарь, чтобы увидеть последний раз, когда функция была вызвана, и отмените ее как ожидалось.

var MyView = Ember.View.extend({
    calledRarely: function() {
        console.log("This will log rarely.");
    },

    calledOften: function() {
        console.log("This will log often.");
        Ember.run.debounce(this, this.calledRarely, 1000);
    }.observes("propertyThatChangesOften")
});

Здесь this.calledOften не отключается вообще, поэтому Ember.run.debounce будет называться так часто, как свойство изменяется. Он не будет вызывать this.calledRarely, пока не завершится наш тайм-аут debounce.