我试图在ember对象中创建一个静态属性(所有实例应共享相同的属性并在其更改时作出反应).在我的情况下,我有4个不同的实例,如果这些实例中的任何一个更改了refresh属性,我希望所有4个实例都对它做出反应.
我发现refresh绑定只对当前实例执行,我希望它为所有实例执行,因为它是一个静态属性.
enabled : function() {
...
}.property('refresh'), <----- this only executes for the current instance
selectionChanged : function() {
...
this.incrementProperty('refresh');
}.observes('selection')
Run Code Online (Sandbox Code Playgroud)
我尝试refresh使用mixin 创建属性
var AbstractControlMixin = Ember.Mixin.create({
refresh : 0
});
var AbstractControl = Ember.Object.extend(AbstractControlMixin,{
...
});
Run Code Online (Sandbox Code Playgroud)
使用重新打开技术
var AbstractControl = Ember.Object.extend({
...
});
AbstractControl.reopen({
refresh : 0
});
Run Code Online (Sandbox Code Playgroud)
但两者都不起作用.
您可以向对象添加对象的引用,这将是在所有实例之间共享的静态引用.但是你需要小心,如果你要把它变成一个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
Run Code Online (Sandbox Code Playgroud)
http://emberjs.jsbin.com/yucupofosu/1/edit?html,js,output
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |