我尝试使用以下代码将对象添加到对象数组中,该对象数组是集合条目中的键,但我得到了一个奇怪的响应"插入失败:错误:标题需要"。我在meteor上使用简单的schema / autoform。
之前是否有人遇到此问题(并有解决方案)?
Template.dashboard.events({
'click .requestinvite'(e,t) {
Posts.insert({ _id : $(e.currentTarget).attr('_id')},
{$push: { invitesRequested : {username : Meteor.userId()} }}
);
}
});
这是coffeescript中的相关简单架构
Schemas.Posts = new SimpleSchema
title:
type:String
max: 60
optional: true
content:
type: String
optional: false
autoform:
rows: 5
createdAt:
type: Date
autoValue: ->
if this.isInsert
new Date()
updatedAt:
type:Date
optional:true
autoValue: ->
if this.isUpdate
new Date()
invitesRequested:
type: [Object]
optional: true
defaultValue: []
owner:
type: String
regEx: SimpleSchema.RegEx.Id
autoValue: ->
if this.isInsert
Meteor.userId()
autoform:
options: ->
_.map Meteor.users.find().fetch(), (user)->
label: user.emails[0].address
value: user._id
答案 0 :(得分:1)
首先,根据正确的javascript分配标准,你在代码中犯了错误。
如果您的代码遭到黑客攻击并且在未分配任何ID的情况下调用click事件,该怎么办?
您的代码必须如下。
Template.dashboard.events({
'click .requestinvite'(e,t) {
var id = $(e.currentTarget).attr('_id');
if(id){
Posts.insert(
{
_id : id
},
{
$push: {
invitesRequested : {username : Meteor.userId()}
}
}
);
} else {
//do something here when you don't have id here, or the `click` event is hacked on UI to work without id'
}
}
});
由于您的SimpleSchema提供了有关title
字段的错误,如果不是强制性的,请在定义optional : true
字段时使用title
。
e.g。
title: {
type: String,
label: "Title",
optional: true //<---- do this
}
注意:默认情况下,所有密钥都是必需的。设置
optional: true
以更改该内容。
答案 1 :(得分:0)
答案是使用Posts.update代替。但Ankur Soni的帖子引导我朝着正确的方向解决这个问题。