解决找不到me的处理方式,另外一种方式

找不到对象me

以前的处理方式是,利用apply函数,将其放到其作用域中,然后能获取到作用域内的me变量。

定义upper

下面是另外一种方式,来为store这种对象增加upper属性,并指向当前的me对象。然后使其能获取到me对象。

afterrender: function (cmp, eOpts) {
    var me = this;
    var height = me.getHeight();
    var margin = (height - 150 - 200 * 2) / 4;
    if (margin > 50 || margin < 0) { //超出边界
        margin = margin > 50 ? 50 : 0;
    }
    me.dvMargin = margin;
    var dv = me.down('dataview');
    Ext.apply(dv.store, {//注意,在这里为其增加一个属性upper
        upper: me
    });
}

使用upper

下面是store的一个listeners,然后cmp拥有upper这个属性,获取到me对象。顺利的传递了upper属性。

listeners: {
    'load': function (cmp, records, successful, operation, eOpts) {
        var me = cmp.upper;
        var margin = me.dvMargin;
        Ext.each(records, function (rd) {
            rd.set({
                margin: margin
            });
            rd.commit();
        });
    }
}

说明

这个其实是之前,突发奇想,然后发现可以利用这种对象属性的方式,来传递变量,关键的属性等。这样,新增的属性即获取到了特定的对象。像store这样的组件,没有up函数,很难找到me变量。

更改

store这样的组件应该能获取到该组建绑定的组件的能力。这样更具有一般性。