2013-11-25 76 views
0

我需要訪問我的HomeController中的動作內定義的方法,但我一直未定義。 我發現有這個sendAction()方法,但在閱讀文檔,github問題和一些(只有幾個)與stackoverflow相關的主題後,我放棄並決定採用一種骯髒的方式。 但是,我仍然明白將是正確的方式來使用它。 下面的代碼:sendAction()方法。訪問控制器中的操作

ArtRank.HomeController = Ember.ObjectController.extend({ 
    photoIndex: 0, 

    actions: { 
     nextPhoto: function() {  
      this.set('photoIndex', this.get('photoIndex') + 1); 
      var items; 

     }, 
     prevPhoto: function() { 
      this.set('photoIndex', this.get('photoIndex') - 1); 
     } 
    }, 

    init: function() { 
     var controller = this; 
     this.set('photoTimer', setInterval(function(){ 
      Ember.run(function() { 
       controller.nextPhoto(); 
      }); 
     }, 3000)); 
    } 

}); 

我需要在我的初始化函數來訪問nextPhoto()。但nextPhoto()是內部動作,所以它給了我一個未定義的。

回答

1

只需使用controller.send(actionName, args ...)

觀察:我不知道是否有可能觸發init方法中的一個動作,所以我用了startTimer: function(){}.on('init'),這個方法會在對象創建和設置後觸發。

ArtRank.HomeController = Ember.ObjectController.extend({ 
    photoIndex: 0, 

    actions: { 
     nextPhoto: function() {  
      this.set('photoIndex', this.get('photoIndex') + 1); 
      var items; 

     }, 
     prevPhoto: function() { 
      this.set('photoIndex', this.get('photoIndex') - 1); 
     } 
    }, 

    startTimer: function() { 
     var controller = this; 
     this.set('photoTimer', setInterval(function(){ 
      Ember.run(function() { 
       controller.send('nextPhoto'); 
      }); 
     }, 3000)); 
    }.on('init') 
}); 
+0

很感謝,它的工作原理!所以我做對了,但在初始階段不起作用,很有意思。 –

相關問題