3

我们都知道我们在ember中有getand set,但是如何delete在一个emberjs对象中设置key呢?

假设一个对象看起来像这样

Ember.Object.create({
    conf: {
        name: 'John',
        age: 16
    }
});

在数据传输期间,我需要从 中删除一个密钥conf,比如说age。您如何做到这一点才能正确删除密钥conf?我已经尝试过set('conf.age', null),或者undefined似乎根本不工作。

编辑

一点背景。当我说它不适用于将其设置为 undefined 或 null 时,这意味着它不适合我的需要。我的课程会自动将conf数据保存到 Mongo 集合中。因此,假设现在您有一个未使用的密钥并且您想摆脱它,您如何删除它?

请注意,有一个更大的类来管理保存过程/数据验证,因此扩展控制器只是为了进行删除不太合适(丑陋)。扩展类可以使用这个beforeSave动作来清理未使用的键,但问题是如何删除这个键?

在 ember 中似乎不存在这样一个简单的动作,可能是为了处理各种绑定/观察者..

4

4 回答 4

7

如果您在 ember 对象上设置属性:

this.set('myObject.keyA', [1,2,3]);

它现在将跟踪该密钥

Ember.keys('myObject'); // will show ['keyA'];

您不能通过将密钥设置为 null 来删除它

this.set('myObject.keyA', null);

自从

Ember.keys('myObject'); // will STILL show ['keyA'];

而是简单地将其作为 javascript 对象删除

delete this.get('myObject').keyA;

然后确认钥匙不见了

Ember.keys('myObject'); // will show [] an empty array;
于 2017-01-11T02:22:07.697 回答
0

事实上你可以定义你自己的函数来处理这个像

Ember.Object.create({
    conf: {
        name: 'John',
        age: 16
    },
    deleteProp:function(key)
    {
       delete this.conf[key]
    }
});
于 2013-03-12T10:04:47.417 回答
0

您是否尝试过简单地“删除”密钥(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete)?假设您的 Ember 对象被命名为 obj,我会这样做

delete obj.conf.age;
于 2013-03-12T08:13:59.010 回答
0

只需添加到@mihai 答案:

如果你想删除嵌套的属性,你可以这样做:

function deleteKeyFromPath([object, path]) {
  let propertyPathArray = path.split('.');

  if (propertyPathArray.length > 1) {
    let keyToDelete = propertyPathArray.pop();
    let parentPropertyPath = propertyPathArray.join('.');
    delete get(object, parentPropertyPath)[keyToDelete];
  } else {
    delete object[path];
  }
}

let user = {
email: 'johbdoe@gmail.com',
personalInfo: {
    name: 'Jack',
    address: {
        line1: 'westwish st',
        line2: 'washmasher',
        city: 'wallas',
        state: 'WX'
       }
   }
}

要删除“名称”,call deleteKeyFromPath([user, 'personalInfo.name'])

于 2018-10-02T12:50:07.917 回答