2013-07-10 3 views
0

Возможно ли узнать, изменилось или не изменилось что-либо, если возможно, произошло Backbone.Model.set()? Причина в том: если я использую события, которые будут выглядеть следующим образом:Знайте, если Backbone.Model.set изменил/не изменил что-либо

  • слушать изменения: что-то
    • сделать что-то, если значение изменилось
  • model.set («значение» «что-то»)

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

+0

Если изменения не произошли, событие не будет срабатывать .... Я буду придерживаться событий, Магистраль - это управляемая событиями библиотека ... дайте свой прецедент, если вы хотите получить лучший ответ. – imrane

ответ

1

Это простое решение, которое скрывает события, в простое синхронное функционирование, которое возвращается, если набор имеет эффект.

Я решил реализовать это в другом имени функции, но вы также можете переопределить поведение по умолчанию.

var M = Backbone.Model.extend({ 
    setThatLetsYouKnow: function(key, value){ 
    var thisSetHasEffect = { flag: false}; 
    this.listenToOnce(this, "change", function(){ 
     thisSetHasEffect.flag = true; 
    }); 
    this.set(key, value); 
    return thisSetHasEffect.flag; 
    } 
}); 

И результат:

var m = new M(); 
m.setThatLetsYouKnow("key",2)// return true 
m.setThatLetsYouKnow("key",2)// reutrn fasle 

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

+0

@Jiew Meng - Кстати, эта реализация основана на текущей реализации Backbone.js множества слушателей, которая происходит в одном и том же синхронном потоке набора (в отличие от реализации setTimeout) – ekeren

Смежные вопросы