2016-04-13 27 views
0

Meteor uygulamamda hesap oluşturmak için ian:accounts-ui-bootstrap-3 kullanıyorum. Bu uygulamada, kullanıcının kullanıcı adını ve cinsiyetini belirttiği biraz özelleştirilmiş versiyon kullanıyorum.Metan'da kullanıcı girdisine göre profil alanı değeri nasıl ayarlanır: ian: accounts-ui-bootstrap-3?

Accounts.ui.config({ 
    requestPermissions: {}, 
    extraSignupFields: [{ 
     fieldName: 'username', 
     fieldLabel: 'Username', 
     inputType: 'text', 
     visible: true, 
     validate: function(value, errorFunction) { 
      if (!value) { 
       errorFunction("Please write your username"); 
       return false; 
      } else { 
       return true; 
      } 
     } 
    }, { 
     fieldName: 'gender', 
     showFieldLabel: false, // If true, fieldLabel will be shown before radio group 
     fieldLabel: 'Gender', 
     inputType: 'radio', 
     radioLayout: 'vertical', // It can be 'inline' or 'vertical' 
     data: [{ // Array of radio options, all properties are required 
      id: 1, // id suffix of the radio element 
      label: 'Male', // label for the radio element 
      value: 'm' // value of the radio element, this will be saved. 
     }, { 
      id: 2, 
      label: 'Female', 
      value: 'f', 
      checked: 'checked' 
     }], 
     visible: true 
    }, ] 
}); 

Bu iyi çalışır ve ben verilerini (biraz kısaltılmış) bir kullanıcı, olsun şuna benzer:

{ 
    "username" : "testuser", 
    "emails" : [ 
     { 
      "address" : "[email protected]", 
      "verified" : false 
     } 
    ], 
    "profile" : { 
     "username" : "testuser", 
     "gender" : "f" 
    } 
} 

Şimdi denilen yeni bir alan ayarlamak için "cinsiyet" değeri kullanmak istiyorum " "jeneric-male.png" ya da "generic-female.png" ifadelerine sahip. https://stackoverflow.com/questions/34435674/meteor-accounts-entry-how-to-set-extrasignupfields-to-meteor-user-profile numaralı yayında Hesapların kullanılması önerilir. onCreateUser mekanizması. Bu yüzden bu yazdım ve sunucu katalogunda main.js dosyaya koydu:

Accounts.onCreateUser(function(user){ 
    if (user.gender=='m') { 
    user.avatar = "generic-male.png" 
    } else { 
    user.avatar = "generic-female.png" 
    } 
}) 

Ama bu aşağıdaki hata üretir:

Exception while invoking method 'createUser' Error: insert requires an argument 

Ben kullanıcı parametre olmadığı için bu varsayalım onCreateUser yöntemine geçti. Ama bu nasıl yapılmalı?

+0

sorunu çözmek gerekir sizin 'Accounts.onCreateUser' işlevi içinde' user' dönersek. –

cevap

2

Sen accountsServer.onCreateUser(func) işlevinde user dönmek gerekir: Örneğin

The function should return the user document (either the one passed in or a newly-created object) with whatever modifications are desired. The returned document is inserted directly into the Meteor.users collection.

:

Accounts.onCreateUser(function(user){ 
    if (user.gender === 'm') user.avatar = "generic-male.png"; 
    else user.avatar = "generic-female.png"; 
    return user; 
}); 
+0

Teşekkürler, bunu çözdü! – NiklasR