2013-09-21 55 views
7

我正在創建一個組件來包裝select2選擇框。代碼如下:從組件內調用一個餘燼組件動作

App.FixedSelectComponent = Ember.Component.extend({ 
    actions: { 
    change: function(value) { 
     this.set('selectedValue',value); 
    } 
    }, 

didInsertElement : function(){ 
    this.$("#select1").select2().on("change", function(e) { 
     if ($.isArray(e.val)) { 
      $.each(e.val, function(index,value) { 
       console.log("multiple:",value.split('>')[2].split('<')[0]); 
      // send to change 
      });    
     } else { 
      console.log("single:",e.val.split('>')[2].split('<')[0]); 
      // send to change 
     } 
    }); 
    }, 

    willDestroyElement : function() { 
    this.$("#select1").select2('destroy'); 
}, 

}); 
然而

,我所堅持的是如何發送我在上(「變」)事件的行動已經得到了數據:我已經定義的變化,或者如果我可以在on(「change」)事件中設置selectedValue屬性

「this」不是「//發送到更改」行的組件 - 如何/在哪裏獲得對組件本身在這一點上?

基本上就是我想實現的是傳遞給的選擇2「變」事件的數據進入我的selectedValue屬性

感謝

回答

-1

試試這個:

App.FixedSelectComponent = Ember.Component.extend({ 
    change: function(value) { 
    this.set('selectedValue',value); 
    } 

    didInsertElement : function(){ 
    var self = this; 
    this.$("#select1").select2().on("change", function(e) { 
     if ($.isArray(e.val)) { 
     $.each(e.val, function(index,value) { 
      console.log("multiple:",value.split('>')[2].split('<')[0]); 
      // send to change 
      self.change(value); // substitute value by whatever you want to pass 
     });    
     } else { 
     console.log("single:",e.val.split('>')[2].split('<')[0]); 
     // send to change 
     self.change(value); // substitute value by whatever you want to pass 
     } 
    }); 
    }, 

    willDestroyElement : function() { 
    this.$("#select1").select2('destroy'); 
    }, 
}); 
0
this._actions['change'].apply(this, value); 
+3

這可能會也可能不會解決問題米,但沒有什麼可以表明它解決了問題,或者在哪裏應用它。 – 2013-10-24 01:06:26

+2

您最好不要使用私有財產/方法,因爲它們如有更改,不作任何保證。請使用'Component.send()'。 – Lacek

1

this上下文將不參考FixedSelectComponent上下文$.each,並且還使用發送方法,該方法將調用FixedSelectComponent改變方法..

參閱:http://emberjs.com/api/classes/Ember.Component.html#method_send

didInsertElement : function(){ 
    var _this = this; 
    this.$("#select1").select2().on("change", function(e) { 
     if ($.isArray(e.val)) { 
      $.each(e.val, function(index,value) { 
       console.log("multiple:",value.split('>')[2].split('<')[0]); 
      _this.send('change',value.split('>')[2].split('<')[0]); // send to change 
      });    
     } else { 
      console.log("single:",e.val.split('>')[2].split('<')[0]); 
      _this.send('change',e.val.split('>')[2].split('<')[0]); // send to change 
     } 
    }); 
    } 
0

與組分和計算屬性:

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    callFromComputedProperty: Ember.computed(function() { 
    return this.send('myAction'); 
    }), 

    actions: { 
    myAction() { 
     return 'It Works'; 
    }, 

    callFromAction() { 
     this.send('myAction'); 
    } 
    } 
})