Meteor 访问Collection2中的设置上下文以在客户端上显示无效键时出现问题

Meteor 访问Collection2中的设置上下文以在客户端上显示无效键时出现问题,meteor,meteor-collection2,Meteor,Meteor Collection2,我正在使用Collection2进行表单插入和验证。它工作得很好 我唯一的问题是使用上下文访问密钥,以便在客户端上向用户返回错误 我有以下代码: Common.coffee Schemas = {} Schemas.Journal = new SimpleSchema goal: type: String label: "Related Goal" max: 200 description: type: Strin

我正在使用Collection2进行表单插入和验证。它工作得很好

我唯一的问题是使用上下文访问密钥,以便在客户端上向用户返回错误

我有以下代码:

Common.coffee

Schemas = {}
Schemas.Journal = new SimpleSchema
    goal:
        type: String
        label: "Related Goal"
        max: 200
    description:
        type: String
        label: "Comment"
        max: 200
    likes:
        type: Number
        label: "Likes"
        min: 0
    createdBy:
        type: String
        max: 50
    createdAt:
        type: Date
        label: "Created At"

Journal.attachSchema(Schemas.Journal)
journalContext = Schemas.Journal.namedContext("insertForm")

On Client:
    Template.journalForm.events
        'submit #newEntryForm': (event) ->
            text = event.target.text.value
            Meteor.call("newJournalEntry", Session.get("activeGoal"), text)             

On Server as a Method:
        'newJournalEntry': (goalId, text) ->
            Journal.insert
                goal: goalId
                description: text
                createdAt: new Date()
                createdBy: Meteor.userId()
                likes: 0
                {validationContext: "insertForm"}, (error, result) ->
                    if error
                        console.log error.invalidKeys
                    else
                        console.log "#{result} added to Journal collection."
验证在服务器上正常工作,当insert被拒绝时,我通过终端看到正确的消息,但是在客户端调用验证上下文总是返回一个空数组。[]

在服务器上执行以下任一操作,但如果在客户端尝试这些操作,它们将为空:

Schemas.Journal.namedContext("insertForm").invalidKeys()

更新: 我在客户端上尝试了几次语法。相同的空数组结果。以下是一些尝试:

Schemas.Journal.namedContext().invalidKeys()
journalContext.invalidKeys()
Schemas.Journal.namedContext("insertForm").invalidKeys()

我看不到您在客户端上的验证位置。未在客户端上验证=客户端上的上下文为空。只要将您的方法转换为客户机/服务器方法(而不是仅限于服务器的方法),它就应该可以工作。@Step643-谢谢。我复制了我的服务器方法,并将其作为Meteor.method添加到客户端。现在它工作了!但是,在客户机上使用该方法可以吗?我一直以为您希望在服务器上使用这些insert命令。而且,有重复的代码似乎很奇怪。我可能在设置这个的最佳方法上遗漏了一些东西。大多数情况下,方法都应该是客户机/服务器。这种模式被称为“延迟补偿”,是流星的主要力量之一。没有代码重复,因为服务器和客户端都使用相同的代码。谢谢-添加了通用的单一方法,很好用!
Schemas.Journal.namedContext().invalidKeys()
journalContext.invalidKeys()
Schemas.Journal.namedContext("insertForm").invalidKeys()