Binding 如何在设置模型时将别名设置为model.attr的属性,否则设置为default.attr?
如果model不为空,则如何创建作为model.someProperty别名的双向属性,否则如何创建作为default.someProperty别名的双向属性?目前,我将a的两个版本包装在{if model}}中,一个绑定到model,另一个绑定到defaults,但是我想从模板中删除逻辑。此外,在某些情况下,集合在交换select之前触发,这会导致错误,因为模型为null 设置模型时,新模型应将someProperty设置为default.someProperty。目前,我通过以下方式实现:Binding 如何在设置模型时将别名设置为model.attr的属性,否则设置为default.attr?,binding,ember.js,Binding,Ember.js,如果model不为空,则如何创建作为model.someProperty别名的双向属性,否则如何创建作为default.someProperty别名的双向属性?目前,我将a的两个版本包装在{if model}}中,一个绑定到model,另一个绑定到defaults,但是我想从模板中删除逻辑。此外,在某些情况下,集合在交换select之前触发,这会导致错误,因为模型为null 设置模型时,新模型应将someProperty设置为default.someProperty。目前,我通过以下方式实现:
modelChanged: function(){
if(default && default.get('someProperty')){
this.set('model.someProperty', default.get('someProperty'));
}
}.observes('model')
我也想知道这是否是最好的方法。DS.attr可以采取的措施。这有用吗
var Post = DS.Model.extend({
title: DS.attr('string', { defaultValue: "Work in progress" })
我不知道这是否可行,只需要几行。但是,可以创建计算属性宏:
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);
}
});
};
现场演示我不知道这是否可行,只使用了几行。我在那把小提琴上做了一个计算宏。你认为呢?默认值需要是动态的。但是@marcio rodrigues correa junior的小提琴展示了一种比我第一次尝试更好的演奏方法,这是一个计算属性中的一切。我必须检查他的方式是否与我的方式相同:计算属性被激发两次。如果有帮助的话,defaultValue也可以接受函数。通过坚持使用DS.attr,您已经获得了一个处理getter和setter的Ember.computed属性。不管怎样,祝你好运。