Как обновить значения внедренного объекта в документе mongoDB?Как проверить и обновить внедренный объект в документе коллекции mongoDB
{{service.id}} и {{service.username}} показывают правильные значения в шаблоне таблицы, но я не уверен, как их вызвать в функции saveItem()
. Когда я попробую service.id
, service.$.id
и service.[0].id
, я получаю Error: Unexpected token .
. Когда я пробую "service.id"
, форма отправляется и ничего не происходит, когда я пытаюсь "service.[0].id"
, форма застряла при редактировании, и ничего не происходит, и когда я пытаюсь выполнить "service.$.id"
, я получаю сообщение об ошибке, когда поле $ не может быть обновлено.
Должен ли я иметь что-то еще в своем javascript-коде? Или я делаю что-то неправильно при определении схемы (т. Е. Не нужно знаков доллара).
Спасибо!
Вот мой код:
var Schemas = {};
Items = new Meteor.Collection('items');
Schemas.Items = new SimpleSchema({
_id: {
type: String,
},
name: {
type: String,
label: "Item Name",
min: 1
},
"service.$": {
type: [Object]
},
"service.$.id": {
type: Number
},
"service.$.username": {
type: String
}
});
Items.attachSchema(Schemas.Items);
var saveItem = function() {
var editItem = {
_id: $('#editId').val(),
name: $('#editName').val(),
"service.$.id": $('#editServiceId').val(), //not working
"service.$.username": $('#editServiceUsername').val() //not working
}
Items.update(Session.get('editItemId'), {$set: editItem}, {validationContext: 'updateForm'}, function(error, result) {
if(!error){
Session.set('editItemId', null);
}
});
}
Template._editItemsItem.helpers({
editing: function() {
\t return Session.equals("editItemId", this._id);
}
});
Template._editItemsItem.events({
'click .editItem': function() {
Items.simpleSchema().namedContext('updateForm').resetValidation();
Items.simpleSchema().namedContext('insertForm').resetValidation();
Session.set("editItemId", this._id);
},
'click .cancelItemEdit': function() {
Items.simpleSchema().namedContext('updateForm').resetValidation();
Items.simpleSchema().namedContext('insertForm').resetValidation();
Session.set("editItemId", null);
},
'click .saveItem': function() {
saveTeam();
},
'keypress input': function(e){
if(e.keyCode === 13){
saveItem();
}
else if(e.keyCode === 27){
Items.simpleSchema().namedContext('updateForm').resetValidation();
Items.simpleSchema().namedContext('insertForm').resetValidation();
Session.set("editItemId", null);
}
}
});
Template._editItems.helpers({
items: function() {
return Items.find();
},
});
<template name="_editItems">
\t <table class="ui very compact selectable celled table">
\t <thead>
\t <tr>
\t \t <th>_id</th>
\t <th>Name</th>
\t <th>Service Name</th>
\t <th>Service Id</th>
\t <th>Edit</th>
\t </tr>
\t </thead>
\t <tbody>
\t {{#each items}}
\t \t \t \t {{> _editItemsItem}}
\t {{/each}}
\t </tbody>
\t </table>
</template>
<template name="_editItemsItem">
\t {{#if editing}} \t
\t \t <tr class="ui form">
\t \t \t <td><div class="ui small input"><input type="text" id="editId" value="{{_id}}"></div></td>
\t \t \t <td><div class="ui small input"><input type="text" id="editName" value="{{name}}"></div></td>
\t \t \t <td><div class="ui small input"><input type="text" id="editServiceUsername" value="{{service.username}}"></div></td>
\t \t \t <td><div class="ui small input"><input type="text" id="editServiceId" value="{{service.id}}"></div></td>
\t \t \t <td>
\t \t \t \t <button class="saveItem ui small circular primary button "><i class="ui save icon"></i></button>
\t \t \t \t <button class="cancelItemEdit ui small circular red button "><i class="ui cancel icon"></i></button>
\t \t \t </td>
\t \t </tr>
\t {{else}}
\t \t <tr>
\t \t \t <td>{{_id}}</td>
\t \t \t <td>{{name}}</td>
\t \t \t <td>{{service.username}}</td>
\t \t \t <td>{{service.id}}</td>
\t \t \t <td>
\t \t \t \t <button class="editItem ui small circular button"><i class="ui edit icon"></i></button>
\t \t \t </td>
\t \t </tr>
\t {{/if}}
</template>
Где вы есть 'вар editItem = { _id: $ ('# editId ') .val(), имя: $ (' # editName '). val(), "service. $. id": $ (' # editServiceId '). val(), // не работает "сервис . $. username ": $ ('# editServiceUsername'). val() // не работает }' try вместо 'var editItem = { _id: $ ('# editId'). Val(), имя: $ ('# editName'). Val(), service: {id: $ ('# editServiceId'). Val(), username: $ ('# editServiceUsername'). val()} ' }' –
@MichelFloyd не повезло с этим, к сожалению. Что-нибудь еще, что вы думаете, может сработать? – pingo
Я исключил несколько полей в документе Item, которые не обновляются. Может ли это вызвать какую-то проблему? – pingo