告诉组件通过父母重新渲染自己

时间:2014-06-28 08:55:47

标签: ember.js

我在屏幕上有各种各样的余烬组件。使用gridster.js将组件存储在网格中。当您在gridster中调整框大小时,可以使用stop函数调整框大小时访问。

export default Ember.View.extend(Ember.Evented,{

    setupGridster : function() {
        $(".gridster ul").gridster({
            widget_base_dimensions: [140, 140],
            widget_margins: [5, 5],
            helper: 'clone',
            resize: {
                enabled: true,
                max_size: [4, 4],
                min_size: [1, 1],
                start: function(e, ui, $widget) {

                },

                resize: function(e, ui, $widget) {

                },

                stop: function(e, ui, $widget) {
                    self.trigger('widget:resize:stop');
                    console.log('widget:resize:stop');
                }
            }
        }).data('gridster');

    ...

在我拥有的组件中:

this.on('widget:resize:stop', this, 'rerender');

但该组件似乎没有在作用域中包含'widget:resize:stop'事件,因此代码永远不会执行。

  1. 如何让每个组件访问'widget:resize:stop'事件。
  2. 有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

何时聆听'对于使用on()的事件,您需要获取触发该方法的事物的实例并在该对象上调用on方法。

很难确切地知道您需要找到哪个对象,因为我不知道您的组件/视图的树,但是如果上述组件' parent是上面的Em.View代码,你应该听:

this.get('parentView').on('widget:resize:stop', this, this.rerender);

另外,请确保您在诸如willInsertElement或didInsertElement之类的方法中调用on。例如:

watchForResize: function() {
    this.get('parentView').on('widget:resize:stop', this, this.rerender);
}.on('willInsertElement'),