2015-03-12 24 views
13

Tôi đã bắt đầu một ứng dụng nhỏ dựa trên bản mẫu meteor với các tài khoản mô-đun-ui.Làm thế nào để cập nhật một phần meteor.users.profile?

Có một bộ sưu tập được tạo ra cuộc gọi người dùng một trong các yếu tố của nó là hồ sơ, điều này một lần nữa có một yếu tố được gọi là "tên" được tên đăng nhập.

Với trong ứng dụng thử nghiệm này là một tùy chọn để cập nhật hồ sơ người dùng. Dữ liệu cho bản cập nhật đến từ một Gửi biểu mẫu. Tôi đã đính kèm trình xử lý sự kiện tại đây

Template.profile.events({ 
    'submit form': function(event) { 
    event.preventDefault(); 
    var data = SimpleForm.processForm(event.target); 
    Meteor.users.update(Meteor.userId(), {$set: {profile: data}}); 
    } 
}); 

Dữ liệu có mọi thứ từ biểu mẫu. Tên "loginname" không được chứa trong biểu mẫu vì vậy cũng không có trong dữ liệu.

trước bản cập nhật Tôi có người dùng.profile.name -> chứa dữ liệu sau khi cập nhật tôi có người dùng.profile. * -> * bằng mọi thứ từ biểu mẫu nhưng "tên" đã biến mất.

Cuối cùng: tôi có thể giữ trường tiểu sử. Cuối cùng tôi muốn có trong users.profile everthing từ PLUS của "tên" nộp.

Cảm ơn mọi gợi ý, khi bạn đọc Tôi mới làm sao băng - và cố gắng hiểu cách mọi thứ liên kết với nhau.

Michael

+2

bản sao có thể có của [Cập nhật bộ sưu tập sao băng mà không xóa hoặc ghi đè trường hiện tại] (http://stackoverflow.com/questions/16929284/update-meteor-collection-without-removing-or-overriding-existing-fields) –

Trả lời

19

Bạn đang thay thế toàn bộ đối tượng cấu hình hiện tại với đối tượng dữ liệu của bạn, vì vậy bất cứ điều gì đã có trước, trong đó có chìa khóa tên, sẽ được xóa sổ.

Nếu tên là thứ duy nhất trong cấu hình bạn muốn giữ, chỉ cần thêm nó vào đối tượng dữ liệu của bạn bằng khóa riêng. Bằng cách đó, đối tượng mới bạn đặt trong hồ sơ sẽ có trường tên tương đương với trường cũ.

var data = SimpleForm.processForm(event.target); 
data.name = Meteor.user().profile.name; 
Meteor.users.update(Meteor.userId(), {$set: {profile: data}}); 
+0

Cảm ơn , Chính xác những gì tôi đang tìm kiếm. – MBushveld

+6

Trả lời bởi @Quin là một giải pháp đơn giản hơn rất tốt 'Meteor.users.update (id, {$ set: {" profile.someNewField ": newData}});' – phocks

27

Bạn có thể dễ dàng giữ các dữ liệu hồ sơ cũ khi cập nhật phần bạn muốn thay đổi như thế này:

Meteor.users.update(id, {$set: {"profile.someNewField": newData}}); 

Hãy chắc chắn rằng "profile.someNewField" là trong dấu ngoặc kép.

Các vấn đề liên quan