2013-11-26 21 views
0

如果model不是空的,我该如何制作一个(双向)属性model.someProperty的别名,否则是default.someProperty的别名?目前,我在{{#if model}}中包装了<select>的两个版本,一个绑定到模型,另一个绑定到默认值,但我想从模板中删除逻辑。此外,在某些情况下,在select交换之前,集合触发,导致错误,因为模型为空。如何在模型设置时将属性设置为model.attr的别名,否则设置为default.attr?

设置模型时,新模型应该将someProperty设置为default.someProperty。目前,我做到这一点:

modelChanged: function(){ 
    if(default && default.get('someProperty')){ 
    this.set('model.someProperty', default.get('someProperty')); 
    } 
}.observes('model') 

,我也想知道这是否是做到这一点的最佳方式

+0

我不知道这是可能的,用几行。我在那个小提琴中为这个做了一个计算宏,http://jsfiddle.net/marciojunior/3LD6a/。你怎么看? –

回答

0

DS.attr()可以采取a default value。这有帮助吗?

var Post = DS.Model.extend({ 
    title: DS.attr('string', { defaultValue: "Work in progress" }) 
+0

默认需要动态。但是@ marcio-rodrigues-correa-junior的小提琴演示了一种方法,它比我的第一次尝试更好,这是计算属性中的一切。我必须检查自己的方式是否会按照我的方式执行:计算的属性会被触发两次。 –

+0

如果有帮助,defaultValue也可以带一个函数。通过坚持使用DS.attr,您已经获得了一个处理getter和setter的Ember.computed属性。无论如何,祝你好运。 – monocle

0

我不知道这是可能的,只用了几行。但是,它可以创建一个计算的属性宏:

var get = Ember.get, set = Ember.set; 

Ember.computed.aliasWithDefaultTo = function(dependentKey, defaultPath) { 
    return Ember.computed(dependentKey, defaultPath, function(key, value) { 
    if (arguments.length > 1) { 
     set(this, dependentKey, value || get(this, defaultPath)); 
     return value; 
    } else { 
     return get(this, dependentKey) || get(this, defaultPath); 
    } 
    }); 
}; 

现场演示http://jsfiddle.net/marciojunior/3LD6a/