2015-04-07 49 views
0

我正在使用表單將一些'設置'保存到Meteor集合中(在下面的示例SettingsCollection中)。流星集合 - 'this'在集合更新後未定義

因爲有一個lot的設置,我使用了一個技巧,我必須在這裏找到stackoverflow,即抓取變量中的集合(調用'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; 
    } 
}) 

我的問題是 - 發生了什麼事「這個」?

它肯定是受行刪除settings._id(我想不出爲什麼)。

是否有另外一種方法可以實現同樣的更新(記住很多設置),它們同樣狡猾和簡潔?

回答

0

因爲您設置了設置= this並且對象通過引用進行分配,這意味着如果您更改此設置,則設置也會發生更改,反之亦然。 數組也是一樣。

這不會發生由值分配的字符串,數字和布爾值。

+0

啊哈。完全正確。然而,我可以通過使用一個空的物體來達到相同的結果,例如, var new_settings = {},new_settings.a = new_a等) –