Meteor.js:如何在辅助函数中从afQuickField访问模式元数据(字段类型)

时间:2017-03-07 21:16:02

标签: javascript meteor meteor-blaze

请告诉我如何从afQuickField帮助器方法访问scheam定义。我想根据类型进行不同的渲染。

假设我有一个简单的架构定义

mySchema = new SimpleSchema({
 numberField: {
  type: Number,
  defaultValue: 3
},
 stringField: {
  type: String,
},...

我想要一个帮助方法,告诉我我正在使用的字段类型。

Template.myQuickField.helper({
  fieldMetaDataString: function() {
    let type = ??What to put here. Code that looks at Simple Schema  definition for the field and tells me its type??
    if(type===String){
     return true;
    }
  return false;

} });

现在我想将afQuickField包装到我自己的模板中,以便我可以根据字段的类型对其进行不同的渲染。请注意,这是一个简化的示例。我想做更多,然后改变风格。

<template name="myQuickField">
  {{#if fieldMetaDataString}}
   {{> afQuickField id=id name=name style="stringstuff"}}
   {{else}}
   {{> afQuickField id=id name=name style="otherstuff"}}
   {{/if}}

编辑: 我想我应该说我在autoform中使用myQuickField。 我也将在其他收藏中使用它。所以我还需要知道如何从字段helperMethod中的auto表单中找出集合的值。

<template name="myForm">
 {{#autoForm collection="mySchema"  type="insert"}}
 <fieldset>
   {{> **myQuickField** name='numberField'}}
   {{> **myQuickField** name='stringField'}}

 </fieldset>   
 {{/autoForm}}
 </template>

2 个答案:

答案 0 :(得分:0)

这样的东西?

Myschemadef ={
 numberField: {
  type: Number,
  defaultValue: 3
},
 stringField: {
  type: String,
}
}

mySchema = new SimpleSchema(Myschemadef);

Template.myQuickField.helper({
  fieldMetaDataString: function(feld) {
    let type = Myschemadef[feld].type;
    return type===String;
} });

答案 1 :(得分:0)

您可以在附加架构之前始终导出架构,然后将其导入模板js文件中。

export const schema = new SimpleSchema({
  stringField: {
    type: String
  },
  numberField: {
    type: Number
  }
});

然后导入

import { schema } from '../imports/api/data/data.js'
Template.myQuickField.helper({
  setStyle: function(name) {
    let type = schema._schema[name].type
    if(type===String){
     return "stringStyle";
    } else if (type===Number){
     return "numberStyle"
    }
});

在myQuickField模板中

{{> afQuickField id=id name={{name}} style="{{setStyle name}}"}}

autoform模板是相同的

<template name="myForm">
 {{#autoForm collection="mySchema"  type="insert"}}
 <fieldset>
   {{> myQuickField name='numberField'}}
   {{> myQuickField name='stringField'}}

 </fieldset>   
 {{/autoForm}}
 </template>