如何从autoform hook访问模板实例数据

时间:2015-07-28 07:41:27

标签: javascript meteor meteor-autoform

我声明了一个与实例相关的字典。

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的一部分它关闭到服务器。

2 个答案:

答案 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属性的输入(或者可能会查看名称,您可以将两者定义为确定。

使用此方法,您不需要定义任何挂钩。