2016-02-01 1 views
0

Какой метод событий может помочь уловить изменение в значение, установленное в «переменную», определенную в марионетном объекте.Слушайте изменение переменной в объекте Marionette?

например:

var LoginModule = Marionette.Object.extend({ 

    initialize: function(options) { 
     this.state = 'pending'; 
    }, 

    init: function(model) { 
     model.fetch({validate:true}) 
     .done(function() { 
      this.state = 'success'; 
     }) 
     .fail(function(res){ 
      console.log(res); 
      this.state = 'failed'; 
     }); 

     return model; 
    } 
}); 

Здесь я хочу, чтобы обнаружить изменения в переменной this.state. Есть ли возможность запускать один раз, например listeToOnce?

Использование:

var loginM = new LoginModule(); loginM.init(model);

ответ

2

Edit: Я думаю, я нашел лучшее решение для вас. Попробуйте, как показано ниже. Во-первых, измените метод init таким образом.

init: function(model) { 
     model.fetch({validate:true}) 
     .done(function() { 
      this.state = 'success'; 
      this.triggerMethod('state:changed'); 
     }) 
     .fail(function(res){ 
      console.log(res); 
      this.state = 'failed'; 
      this.triggerMethod('state:changed'); 
     }); 

     return model; 
    } 

После того, что вы могли поймать событие state:changed, как показано ниже:

this.on("state:changed", function(){ 
    //handle your changed state 
}); 
+0

Спасибо @vlad. когда я связываюсь, как показано ниже, обратный вызов не запускается. 'var loginM = new LoginModule(); loginM.on ('change', function() {console.log ('changes shired')}); loginM.init (model); ' Есть ли у вас какие-либо конкретные причины? – peterkr

+0

Я обновил главный ответ, отметьте его –

+0

Спасибо @vlad, который работает так, как ожидалось. – peterkr