在Ember.js中使用data-ember-action添加动作处理程序

时间:2014-03-24 12:33:26

标签: jquery ember.js jquery-datatables

我注意到,当我在Ember中有{{action}}时,它会被渲染为data-ember-action =" SomeNumber"。我尝试直接在HTML中使用data-ember-action,这也有效。现在我想找出分配给特定动作处理程序的id,我可以自己为动作处理程序分配一个ID吗?实际上我使用jquery datatables插件来显示一些数据。此数据必须显示为链接,并且在单击链接时必须调用某个操作处理程序。如果我尝试在代码中使用{{action}},则会在html中将其呈现为{{action}}。我想调用一个名为open的动作处理程序,参数data.name,如下面的代码所示

App.SearchView = Em.View.extend({
data: function(){
},
tagName:'table',
didInsertElement: function(){  
var mod=this.get('controller').get('model');
var self=this;
 this.$().dataTable( {
    "bProcessing": false,
    "bFilter": false,
    "bInfo": false,
    "aaData":mod,
    "aoColumns": [
        { "mData": "name" }
    ],
    "aoColumnDefs": [ 
      {
        "fnRender": function ( oObj ) { 
          var data=oObj.aData;
          return '<br/><a {{action open data.name}}>' + data.name " </a>";           
        },
        "aTargets": [0]
      }
]
} );

} });

2 个答案:

答案 0 :(得分:2)

我在另一个stackoverflow帖子上找到了这个问题的答案。 YUI with emberjs Datatable with ember dynamic link

答案 1 :(得分:0)

通常在需要使用纯js从DOM访问ember实体的情况下,例如当需要处理onclick js事件并将其委托给ember实体时,我有一种方法发现有用的是让一个泛型函数返回一个ember view传递一个DOM元素并处理action.Something like,

function getView($el){
  return Ember.View.views[$el.closest(".ember-view").attr("id")];
}

...

return '<br/><a href=# onclick="getView($(this)).get(\'controller\').send(\'open\','+ data.name+')">'+data.name+'</a>';

基本上它取决于您发布的内容。