如何将点击事件绑定到元素,这是在加载异步数据后显示的?

时间:2014-05-19 10:25:29

标签: ember.js coffeescript

在我的路线中,我正在提取一些产品。

  setupController: (controller, model) ->
    controller.set('model', model)
    controller.set('commissionLines', @store.find('commissionLine'))
    controller.set 'products', @store.find('product')

产品显示在我的手柄模板中,我使用每个循环打印它们。在点击产品之前,我希望隐藏每个产品的描述。所以我添加了一个视图,它观察控制器中的产品,并相应地添加点击事件。

MyApp.PropperViewNameView = Ember.View.extend
  applyClick: ( =>
    @$('.button.expand').click (e) =>
      @$(@).parent('tr').next().transition('slide down')
  ).observes('controller.products')

不幸的是,如果我添加"调试器"对于apply click方法,我可以看到它是在渲染html之前触发的。

如何正确附加我的绑定?

1 个答案:

答案 0 :(得分:0)

所以我在编写它时实际上解决了这个问题,就像运行循环一样。 问题是在手柄绑定模板之前触发观察。所以我需要在之后运行我的点击事件,这是通过告诉ember在下一个运行循环中运行你的代码来完成的,你可以用“Ember.run.next”来完成。

所以我的视图代码现在看起来像这样。

  applyClick: ( ->
    Ember.run.next =>
      @$('.button.expand').click (e) =>
        @$(@).parent('tr').next().transition('slide down')
  ).observes('controller.products')

这里是js

  applyClick: function() {
    _this = this
    Ember.run.next(function() {
      _this.$('.button.expand').click(function(e) {
        _this.$(_this).parent('tr').next().transition('slide down');
      });
    });
  }.observes('controller.products'),

如果有更干净的方式,请随意投入。