我有一个具有大量属性的模型,大约20个。
App.Foo = Ember.Object.extend({
foo01: null,
foo02: null,
...
foo20: null
因为我需要区分null
和""
的值,所以我也拥有所有这些属性:
isFoo01Set: function() { return foo01 !== null; }.property('foo01'),
isFoo02Set: function() { return foo02 !== null; }.property('foo02'),
...
isFoo20Set: function() { return foo01 !== null; }.property('foo20')
请注意,我的真实案例中的实际名称不是foo01..20
,而是有意义的名称彼此不同。
然后我需要一大堆动作来设置/取消设置所有这些属性。
在我的路由器中:
setFoo01: function(router, instance) {
router.get('myController').setFoo01(instance.context);
},
unsetFoo01: function(router, instance) {
router.get('myController').unsetFoo01(instance.context);
},
直到foo20
。然后在我的控制器中:
setFoo01: function(obj) {
obj.set('foo01', '');
},
unsetFoo01: function(obj) {
obj.set('foo01', null);
依此类推foo20
。
显然我一定是做错了。但我发现由于handlebars
限制(按设计),我不能在模板中做任何事情。
我想有这样的事情:
{{# each property in obj}}
<a {{action set obj property}}>Set {{property}}</a>
{{/each}}
但看起来这不可能。
那么,拜托,你能告诉我有更好的方法,它是什么?
答案 0 :(得分:0)
我想提出一个模糊的想法......希望这会有所帮助
App.Foo = Ember.Object.create({
name: "",
presence: function(){
return this.get('name')!==null;
}.property('name'),
setFoo: function(){
this.set('name', "");
},
unsetFoo: function(){
this.set('name', null);
}
})
App.fooArray = []
for(var i=0;i<=5;i++){
App.fooArray.pushObject(App.Foo.create({name:"foo"+i}));
}
{{#each element in App.fooArray}}
<a {{action element.unsetFoo}} href="#">un-set {{element.name}}</a>
<a {{action element.setFoo}} href="#">Set {{element.name}}</a>
{{/each}}