Ember.js:处理模型中的大量属性

时间:2012-09-24 19:10:27

标签: ember.js handlebars.js

我有一个具有大量属性的模型,大约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}}

但看起来这不可能。

那么,拜托,你能告诉我有更好的方法,它是什么?

1 个答案:

答案 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}}