从组件内调用ember组件操作

时间:2013-09-21 08:28:11

标签: ember.js

我正在创建一个组件来包装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”)事件中获得的数据发送到action:更改我已经定义的,或者我是否可以设置selectedValue属性本身在开启(“更改”)事件

“this”不是“// send to change”行的组件 - 此时我如何/在何处获得对组件本身的引用?

基本上我想要实现的是将传递给select2的“change”事件的数据导入我的selectedValue属性

感谢

5 个答案:

答案 0 :(得分:9)

您可以使用Component.send('actionName')

我在Ember's documentation找到了它。

答案 1 :(得分:2)

GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); if (geofencingEvent.hasError()) { String errorMessage = GeofenceErrorMessages.getErrorString(this, geofencingEvent.getErrorCode()); Log.e(TAG, errorMessage); return; } // Get the transition type. int geofenceTransition = geofencingEvent.getGeofenceTransition(); 上下文不会引用this中的FixedSelectComponent上下文,也会使用send方法调用FixedSelectComponent更改方法。

参考:http://emberjs.com/api/classes/Ember.Component.html#method_send

$.each

答案 2 :(得分:0)

this.get('actions').change.call(this, value);

检查http://emberjs.com/api/classes/Ember.Component.html#property_actions - 'actions'只是组件上的另一个属性。

答案 3 :(得分:-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');
  },
});

答案 4 :(得分:-1)

this._actions['change'].apply(this, value);