所以我对MeteorJS不熟悉,并且正在为表单实现错误处理。我正在使用简单验证,因此我得到了错误键列表和错误消息。
有没有办法可以在控制器事件处理程序中返回它们,以便我可以在{{}}标记中对它们进行评估?
假设我有一个简化的处理程序
//New thread form on forum page
Template.forum_details.events({
"submit .new-thread": function (event) {
var errors = [{field: 'title',error: 'title is required'}]
// Prevent default form submit
return false;
}
});
我可以在模板中渲染这些错误,还是需要使用jquery / etc?
我希望能够修改模板数据并使用e,g。
进行评估{{#each errors}}
感谢下面的回答,我能够提出以下内容,效果很好!
errors.js:
throwError = function(field,message) {
//format the 'required' error type to make it look a little more readable...
if(message == 'required')
{
message = field + " is required.";
}
Errors.insert({field:field,message: message});
};
if (Meteor.isClient) {
Template.errors.helpers({
errors: function() {
return Errors.find();
}
});
Template.registerHelper('hasError',
function(key)
{
//console.log("Checking for key:" + key);
if(Errors.find({field:key}).count() > 0)
{
return true;
}
else
{
return false;
}
}
);
Template.error.helpers({
//Return the error for the specified key
error: function(key)
{
return Errors.findOne({field:key});
},
message: function(key)
{
//console.log("Finding message for key: " + key);
//console.log(key);
Errors.findOne({field:key}).message;
return Errors.findOne({field:key}).message;
}
});
}
Errors.html
<template name="errors">
<div class="errors">
{{#each errors}}
{{> error}}
{{/each}}
</div>
</template>
<template name="error">
{{#if hasError key }}
<div class="alert alert-danger" role="alert">
<button type="button" class="close" data-dismiss="alert">×</button>
{{message key}}
</div>
{{/if}}
</template>
然后在我的实际形式中,我称之为:
<div class="form-group title">
<label for="title">Thread Title</label>
<input class="form-control" type="text" name="title" placeholder="Thread Title" />
<span class="help-block title" name="title"></span>
{{>error key='title'}}
</div>
如果存在则显示错误消息,如果不存在则显示任何错误消息。
还可以通过传入字段的“键”来为文本框,文本区域,数字输入等创建模板。
答案 0 :(得分:1)
答案 1 :(得分:1)
你可以像这样管理错误(我从Discover Meteor Erros Chapter获取代码。)
首先创建一个新的空集合
Errors = new Mongo.Collection(null); //we use the keyword null, when we don't want the data get stored on the database
第二次创建此功能。
throwError = function(message) {
Errors.insert({message: message});
};
<强>第三即可。使用{{&gt;}} yield helper
调用模板名称<template name="layoutExample">
<div class="container">
{{> header}}
{{> errors}} <!-- Here or whatever you want to top the error messages -->
<div id="main" class="row-fluid">
{{> yield}}
</div>
</div>
</template>
四使用此数据创建错误模板。
<template name="errors">
<div class="errors">
{{#each errors}}
{{> error}}
{{/each}}
</div>
</template>
<template name="error">
<div class="alert alert-danger" role="alert">
<button type="button" class="close" data-dismiss="alert">×</button>
{{message}}
</div>
</template>
不要忘记errors
助手
Template.errors.helpers({
errors: function() {
return Errors.find();
}
});
五和上次测试。
throwError("I'm an error!");
不,你可以在回调中的应用程序上使用它,或者你可以抛出任何错误。
实施例
Example.insert({dummyData:"im a dummy"},function(err,result){
if(err){
return throwError(err.reason);
}else{
console.log("Well the insert was just fine")
}
})