我声明了一个与实例相关的字典。
Template.newMessage.onCreated(function () {
var self = this;
self.dict = new ReactiveDict('namedDic');
});
并通过助手和事件中的Template.instance().dict.get()
访问它。
然而,autoform在某处嵌套了另一个模板,所以我的代码访问这个dict,不再有效:
AutoForm.hooks({
serverCall: {
before: {
method: function (insert, update, current) {
insert.foo = Template.instance().dict.get('foo'); <-- fails
Meteor.call('serverCall', insert);
return true;
}
}
}
});
doco似乎没有提及访问父模板的任何方式,我也不想开始猜测它的父母级别。
如果它有任何区别,我的标记看起来像这样:
+quickForm id='newMessage' schema='Schema.CustomMessage' type='method' meteormethod='serverCall'
这有点像A-> B问题,我想做的只是让autoform生成并验证几个字段,然后我可以在发送之前插入一些隐藏值作为helper / event / hook的一部分它关闭到服务器。
答案 0 :(得分:2)
我确定这不是最好的方法,但我通过在同一文件范围内设置外部变量来实现它。 例如:
var myNewMessageTemplate = null;
Template.newMessage.onCreated(function () {
var self = this;
self.dict = new ReactiveDict('namedDic');
myNewMessageTemplate = self;
});
AutoForm.hooks({
serverCall: {
before: {
method: function (insert, update, current) {
insert.foo = myNewMessageTemplate.dict.get('foo'); <-- fails
Meteor.call('serverCall', insert);
return true;
}
}
}
});
你需要确保什么,hooks和onCreate在同一个文件中,在同一范围内。
答案 1 :(得分:1)
我过去这样做过:
定义帮助程序以检索ReactiveDict
Template.newMessage.helpers({
foo : function () {
return Template.instance().dict.get('foo');
}
});
然后,我在我的模板中的某处包含了帮助器。如果您不希望用户看到它,请使用class="hidden"
。
<input type="text" class="hidden" value="{{foo}}" data-schema-key="foo" name="foo">
当quickForm提交时,我相信它会查找所有已定义data-schema-key属性的输入(或者可能会查看名称,您可以将两者定义为确定。
使用此方法,您不需要定义任何挂钩。