2013-03-12 130 views
3

我们都知道我们有getset在烬中,但你怎么delete在一个emberjs对象的关键?如何删除emberjs中的密钥?

假定物体看起来像这样

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

在数据传输,我需要从conf删除密钥,比方说age。你如何做到这一点从conf正确删除一个密钥?我试过set('conf.age', null)undefined,但似乎根本没有工作。

编辑

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

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

这似乎是这样一个简单的动作烬不存在,可能是处理所有类型的结合/观察员..

+0

当你说set('conf.age',undefined)根本不工作,你的意思是Object.get(“conf.age”)返回16而不是未定义的,即使设置为undefined? – 2013-03-12 10:22:21

+0

这有一个原因。这个'conf'将通过一些通用检查保存到数据库中。我希望这个'conf.age'不会被保存到数据库中。现在我将它设置为undefined,但它在db中显示为'conf.age:'''。 – 2013-03-14 10:18:39

+0

为什么你需要删除一个密钥?基本上,当你发布到你的服务器{name:'John',age:undefined}时,你可以在params ['age']值上添加一个服务器端验证,如果它未定义则不做任何事情,否则修改一个新的年龄,或者可能是我没有正确理解你的问题?或者你的意思是你删除了一个模型在客户端的密钥,它应该删除服务器端模型的相应属性(mongo对象)? – 2013-03-14 10:31:51

回答

0

您是否尝试过简单的“删除”键(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete)?假设你的灰烬对象名为OBJ,我会做

delete obj.conf.age; 
+0

其实这只是一个例子。真实的是我的钥匙在控制器中。我需要从我的视图中删除特定的密钥。所以语法会很笨拙,比如'delete this.get('controller.conf')。没有办法〜 – 2013-03-12 08:19:17

+0

你真的需要删除它吗?或者是隐藏它的基础上你的模板中的条件选项? – Rudi 2013-03-12 09:57:27

+0

必须移除钥匙才能实际节省空间。这不是为了展示,而是为了节省。也许我错了,但想法是摆脱这个关键,而不是将其设置为未定义或空白。 – 2013-03-14 10:20:03

0

事实上,如果你灰烬对象上设置属性ü可以定义自己的函数来处理这个喜欢

Ember.Object.create({ 
    conf: { 
     name: 'John', 
     age: 16 
    }, 
    deleteProp:function(key) 
    { 
     delete this.conf[key] 
    } 
}); 
+0

不完全解决这个问题,因为扩展控制器只是为了解决这个问题会很麻烦。如果没有人有更好的答案,我会保留这个最终答案。 – 2013-03-14 10:21:54

6

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

现在它将保持是关键

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

你不能将它设置删除键为空

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; 
+1

感谢您挖掘出来!我不在这个项目了,所以我怀疑我是否会需要这个。无论如何为努力upvote :) – 2017-01-11 02:45:09