【发布时间】:2015-10-25 19:49:07
【问题描述】:
我正在尝试使用快速表单进行方法更新,但每当我输入并提交时,控制台中都会出现以下错误。
Uncaught TypeError: Cannot read property 'validation' of undefined
Uncaught TypeError: Cannot read property 'autosave' of undefined
Uncaught TypeError: Cannot read property 'type' of undefined
{{#quickForm id="archiveIssue" type="method-update" meteormethod="editIssue" collection=collection doc=doc autocomplete="off"}}
{{> afQuickField name='Notes'}}
{{/quickForm}}
检索集合的辅助函数。
Template.archiveIssue.helpers({
doc: function () {
return Session.get("archiveDoc");
},
collection: function () {
return Collections.Issues;
}
});
问题不是来自于流星方法,该方法实际上从未被调用过。它们在更新 autoform 包后开始出现 -> https://github.com/aldeed/meteor-autoform/blob/master/CHANGELOG.md
Cannot read property 'validation' of undefined 出现在所有键入的键盘上。其他 2 个在我尝试提交时出现。
方法
if (Meteor.isServer){
Meteor.methods({
newIssue: function(doc) {
check(doc, Schema.Issues);
Collections.Issues.insert({
User: Meteor.user()._id,
Description: doc.Description,
createdAt: new Date,
Archived: {
"Archived": false,
"User": null,
"Notes": null
},
});
},
editIssue: function(modifier, docId) {
console.log('editIssue called; modifier = ' + JSON.stringify(modifier, null, 4) + '; docId = ' + docId);
check(modifier, Schema.Issues);
Collections.Issues.update({
"_id": docId
},
modifier
);
},
});
}
架构
Collections.Issues = new Mongo.Collection('issues');
Schema.Issues = new SimpleSchema({
Description: {
type: String,
max: 500,
optional: true
},
User: {
type: String,
label: "User",
optional: true
},
Notes: {
type: String,
label: "Notes",
optional: true
},
Archived: {
type: Object,
optional: true
},
"Archived.Archived": {
type: Boolean,
optional: true
},
"Archived.User": {
type: String,
max: 50,
label: "Archiving User",
optional: true
},
"Archived.Notes": {
type: String,
label: "Notes",
optional: true
}
});
Collections.Issues.attachSchema(Schema.Issues);
模板
<template name="issues">
<div style="width:90%">
<h1><i class="fa fa-exclamation-triangle"> Issues</i></h1>
<h2> Active </h2>
{{> issueModal}}
{{> tabular table=TabTables.Issues selector=Active_Selector class="table table-striped table-bordered table-condensed" width="100%"}}
<h2> Archived </h2>
{{> tabular table=TabTables.Issues_Archived selector=Archive_Selector class="table table-striped table-bordered table-condensed" width="100%"}}
</div>
</template>
<template name="issueModal">
<div class="modal fade" id="insertIssueModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">New Issue</h4>
</div>
<div class="modal-body">
<p>{{> insertIssue}}</p>
</div>
</div>
</div>
</div>
<div class="addButton"><button type="button" class="btn btn-success" data-toggle="modal" data-target="#insertIssueModal"><i class="fa fa-plus-square fa-lg"> Add Issue</i></button></div>
</template>
<template name="insertIssue">
{{#quickForm id="insertIssue" type="method" meteormethod="newIssue" collection=collection validation="keyup" fields="Description" omit="User,Archived.Archived,Archived.User,Archived.Notes" autocomplete="off"}}
{{/quickForm}}
</template>
<template name="archiveIssueModal">
<div class="modal fade" id="archiveIssue" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header" >
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title" ><i class="fa fa-archive"> Archive Issue</i></h4>
</div>
<div class="modal-body">
<p>{{> archiveIssue}}</p>
</div>
</div>
</div>
</div>
<div class="archiveButton" style="margin: auto 0;" align="center">
<button id="archiveButton" type="button" class="btn btn-xs btn-info" data-toggle="modal" data-target="#archiveIssue"><i class="fa fa-archive"> Archive</i></button>
</div>
</template>
<template name="archiveIssue">
<div align="left">
{{#quickForm id="archiveIssue" type="method-update" meteormethod="editIssue" collection=collection doc=doc autocomplete="off"}}
{{> afQuickField name='Notes'}}
{{/quickForm}}
</div>
</template>
存档文档是从助手设置的
Template.archiveIssueModal.events({
"click .archiveButton": function (event) {
Session.set("archiveDoc", this);
}
});
【问题讨论】:
-
collection的值是多少?你是怎么设置的? -
使用辅助功能编辑了原始帖子。
-
您说提交时会出现错误。这是否意味着它们来自 editIssue 方法?你能显示代码吗?你并没有真正提供足够的信息来获得帮助。见:stackoverflow.com/help/mcve
-
如果不查看更多代码,很难提供帮助。这是一个基于您目前所展示内容的工作示例:github.com/markleiber/so_31791792
-
在玩过你的例子并检查你的包版本之后,我仍然不确定我的有什么问题。难道是包含的另一个包导致了这个问题?