无法使用属性绑定获取静态属性以在emberjs类中工作

时间:2015-01-06 02:39:25

标签: ember.js

我正在尝试在ember对象中创建一个静态属性(所有实例应共享相同的属性并在其更改时作出反应)。在我的情况下,我有4个不同的实例,如果这些实例中的任何一个更改refresh属性,我希望所有4个实例都对它做出反应。

我发现refresh绑定仅针对当前实例执行,因此我希望它为所有实例执行,因为它是静态属性。

        enabled : function() {
           ...
        }.property('refresh'), <----- this only executes for the current instance


        selectionChanged : function() { 
            ...
            this.incrementProperty('refresh');
        }.observes('selection')

我尝试使用mixin

创建refresh属性
    var AbstractControlMixin = Ember.Mixin.create({
        refresh : 0
    });

    var AbstractControl = Ember.Object.extend(AbstractControlMixin,{
       ...
    });

使用重新打开技术

var AbstractControl = Ember.Object.extend({
    ...
});

AbstractControl.reopen({
            refresh : 0
});

但两者都没有效果。

1 个答案:

答案 0 :(得分:6)

您可以向对象添加对象的引用,这将是所有实例共享的静态引用。但是你需要注意,如果你要把它变成一个mixin,那么它将在每一个使用它的东西上共享,对于每个类都没有区别。

var klass = Em.Object.extend({
  name:'',
  refresh:{
    value:0
  },
  changed: function(){
    console.log('refresh ' + this.get('name'));
  }.observes('refresh.value')
});

var k1 = klass.create({name:'k1'});
var k2 = klass.create({name:'k2'});

k1.incrementProperty('refresh.value'); // this will fire changed for all instances

http://emberjs.jsbin.com/yucupofosu/1/edit?html,js,output