如何仅获取模型本身的自定义属性属性?

时间:2015-01-25 19:33:24

标签: ember.js

我有一个自定义模型attr(类似于ember-data附带的内容)

var attr = function() {
    var value = '';
    return function(key, val) {
        if (arguments.length === 2) {
            value = val;
        }
        return value;
    }.property()
};

我用它来注释我的模型属性

var Foo = Ember.Object.extend({
    firstName: attr()
});

当我循环浏览此实例上的“键”时,我正在寻找的是一种“仅”这些attrs的方法(例如-in我的回滚方法我想重置其中的每一个 - 但没有其他键应该被重置)

var Foo = Ember.Object.extend({
    firstName: attr(),
    rollback: function() {
        for(var key in this){
            this.set(key, "some value here");
        }
    }
});

有可能以某种方式使这个attr特别,所以我只能在模型上循环这些attribues吗?

2 个答案:

答案 0 :(得分:2)

我想出了解决问题的方法。在attr()方法内添加meta到计算属性。似乎它是为像这样的案件设计的:

  

在某些情况下,您可能希望使用有关其运行方式或运行值的其他元数据来注释计算属性。   (API Documentation

所以,attr()方法:

var attr = function() {
  var value = '';
  return function(key, val) {
    if (arguments.length === 2) {
      value = val;
    }
    return value;
  }.property().meta({ isCustomAttr: true });
};

对象定义:

var Foo = Ember.Object.extend({
    firstName: attr(),
    rollback: function() {
      Foo.eachComputedProperty(function (item) {
        if(Foo.metaForProperty(item).isCustomAttr)         {
          console.log('This property was defined using custom attr() method and its key is: ' + item);
        }
      });
    }
});

Working demo.输出:

  

“此属性是使用自定义attr()方法定义的,其关键是:firstName”

我相信它是狡猾的方式。

答案 1 :(得分:0)

为什么不直接创建这些“特殊”属性的哈希并反复遍历呢?