2017-07-04 80 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.謝謝。 –