2012-09-24 22 views
3

我有大量屬性的模型,約20Ember.js:處理大量的屬性在模型

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

也許使用Ember.keys()可能是有用的,你http://emberjs.com/api/#method_keys –

回答

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}} 
+0

作爲我說:「請注意,我真實世界中的實際名稱不是foo01..20,而是有意義的名稱,它們彼此都不相同。」 所以他們就像'first_name','last_name','age','ssn'等等。真正的屬性名稱,不是01到20之間的數字。 –

+0

沒關係,在這種情況下,有一個數組namenameArray = [「first_name」,「last_name」,「age」...],然後App.Foo.create({name:nameArray [i]})...明白了嗎? –

+0

這是如何幫助我設置/取消設置所有這些不同屬性的操作? –