3

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

但看起来这不可能。

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

4

1 回答 1

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}}
于 2012-09-25T10:45:21.410 回答