2017-07-04 130 views
0

我正在“超级管理员”用户可以创建其他用户并设置他们的用户名和密码的项目中工作。我有一个AutoForm quickForm根据连接到Meteor.users集合(使用集合2)的SimpleSchema呈现表单。 继架构连接到用户收集Collection2 docs的建议,我的模式是这样的:SimpleSchema和AutoForm:将密码字段渲染为单个输入

Usuarios.schema = new SimpleSchema({ 
    ... 
    username: { 
     type: String, 
    }, 
    services: { 
     type: Object, 
     optional: true, 
     blackbox: true 
    }, 
    "services.password": { 
     type: String, 
     optional: true, 
     autoform: { 
     type: 'password' 
     } 
    }, 
    ... 
}); 

呈现的形式如下: Rendered template

但我想有密码字段呈现像用户名一(没有服务面板)。 我还没有找到解决这个问题的方法。我需要在架构中使用Services Object类型属性或者在用户插入失败时进行验证(使用Accounts.createUser()),因此面板被呈现(因为属性的Object类型)。

关于如何实现所需模板渲染的任何想法?

回答

0

你的密码是“服务”对象的一部分,这就是为什么它是一个afObjectField内自动呈现使用quickForm或quickFields时:当您使用afQuickField组件的

afObjectField

字段是对象, 它使用afObjectField组件呈现,除非您覆盖 类型或指定选项。默认情况下,对具有Object类型字段的模式使用 quickForm时会发生这种情况。

afObjectField组件将所有对象字段的子字段 作为一个整体呈现在一起。该组标有名称为 的对象字段。根据您使用的主题模板,该组的实际视觉表示会有所不同 。对于“bootstrap3”默认 模板,该组出现在具有标题的面板中。

解决方案A:手册的形式呈现

为了使您的密码作为一个单一的领域,你需要手动设置autForm和使用afFieldInput引用的字段。形式mthen可能看起来像(未经测试,但代码看起来应该像)这样的:

{{> autoForm id="login" schema=Usuarios.schema}} 
    {{> afFieldInput type="text" name="username"}} 
    {{> afFieldInput type="password" name="services.password"}} 
{{/autoForm}} 

其优点,你的形式看起来完全如你所愿,但有一个缺点,那你要添加的所有演员(验证消息和东西)手动。

解决方案B:当你拉出来的密码服务组的更改模式

,那么你将有同样的效果自动渲染与用户名:单输入字段。

Usuarios.schema = new SimpleSchema({ 
    ... 
    username: { 
     type: String, 
    }, 
    services: { 
     type: Object, 
     optional: true, 
     blackbox: true 
    }, 
    ... 
    password: { 
     type: String, 
     optional: true, 
     autoform: { 
     type: 'password' 
     } 
    }, 
    ... 
}); 
+0

解决方案B工作!由于我的项目结构,我不能使用解决方案A.谢谢。 –