Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何仅获取模型本身的自定义属性?_Ember.js - Fatal编程技术网

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

Ember.js 如何仅获取模型本身的自定义属性?,ember.js,Ember.js,我有一个自定义模型attr(类似于带有余烬数据的船舶) 我用它注释我的模型属性,就像这样 var Foo = Ember.Object.extend({ firstName: attr() }); 我在寻找一种方法,当我在这个实例上循环“键”时,可以“仅”获得这些属性(例如,在我的回滚方法中,我希望重置其中的每一个键,但不应重置其他键) 有没有可能以某种方式使这个属性变得特殊,这样我就可以只循环模型上的那些属性?为什么不创建这些“特殊”属性的散列并迭代它呢?我想出了解决您问题的方法。在

我有一个自定义模型attr(类似于带有余烬数据的船舶)

我用它注释我的模型属性,就像这样

var Foo = Ember.Object.extend({
    firstName: attr()
});
我在寻找一种方法,当我在这个实例上循环“键”时,可以“仅”获得这些属性(例如,在我的回滚方法中,我希望重置其中的每一个键,但不应重置其他键)


有没有可能以某种方式使这个属性变得特殊,这样我就可以只循环模型上的那些属性?

为什么不创建这些“特殊”属性的散列并迭代它呢?

我想出了解决您问题的方法。在
attr()
方法内部,将
meta
添加到计算属性。似乎它是为这样的情况设计的:

在某些情况下,您可能希望使用附加元数据对计算属性进行注释,说明它们如何工作或对哪些值进行操作。 ()

因此,
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);
        }
      });
    }
});
产出:

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


我相信这是真正的余烬之路。

这是一个想法——只是在寻找一种更为免提/自动化的东西。我计划提取一个简单的isDirty/rollback基类(类似于DS.Model)long(er)term这是一个问题、注释还是一个答案?很好!我在余烬数据中查看了类似的内容,你搞定了!
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);
        }
      });
    }
});