Meteor Collections - 收集更新后'this'未定义

时间:2015-04-07 08:24:16

标签: mongodb meteor

我正在使用表单来保存一些设置'到Meteor集合(在下面的示例中' SettingsCollection')。

因为有 lot 的设置,我使用的技巧是我必须在stackoverflow上找到的,即在变量中抓取集合(call' settings' ),删除._id,编辑,然后使用更新的变量更新集合。

然而,这会导致弄乱这个':

Template.settings_edit.events({
  'submit form': function(e, t) {

    var settings = this // 'THIS' BEING THE DATA CONTEXT        
    var settings_id = this._id
    console.log('settings_id: ', settings_id)  //RETURNS _ID AS EXPECTED

    settings.x = new_x  
    settings.y = new_y
    settings.z = new_z
    settings.a = new_a
    // ...
    // etc.

    delete settings._id // MAKES THE COLLECTION 'HEADLESS' SO THAT I CAN USE IT FOR THE UPDATE BELOW

    SettingsCollection.update(settings_id, { $set: settings })     
    console.log('this._id: ', this._id)  // RETURNS UNDEFINED.  WHAT HAPPENED TO 'THIS'???    
    return false;
   }
})

我的问题是 - 这个'发生了什么?

它肯定受行删除设置的影响._id(我无法思考为什么)。

还有另一种方法可以实现同样的更新(记住很多设置)同样狡猾和简洁吗?

1 个答案:

答案 0 :(得分:0)

因为您设置了settings = this并且对象是通过引用分配的,这意味着如果您更改此设置,则设置也会更改,反之亦然。 数组也是如此。

对于按值分配的String,Number和boolean,不会发生这种情况。