助手和事件之间的流星模板参数值不同

时间:2016-09-14 09:05:06

标签: meteor meteor-blaze

我想在参数中包含Blaze模板,然后在事件中使用参数值。问题是,当我第二次使用不同的参数包含模板时,我从事件中模板的第一个实例获取参数值。

模板:

<template name="UploadFormLayoutImage">
    <form class="uploadPanel">
        <input type="file" name="fileupload" id="input-field">
        <label for="input-field">Upload file</label>
    </form>
</template>

包括:

{> UploadFormLayoutImage layoutArea="area1"}}
{> UploadFormLayoutImage layoutArea="area2"}}

JS:

Template.UploadFormLayoutImage.onCreated(function(){
   this.currentArea = new ReactiveVar;
   this.currentArea.set(this.data.layoutArea);
});


Template.UploadFormLayoutImage.helpers({
    layoutArea: function() {
        return Template.instance().currentArea.get(); //Returns the correct argument value for each instance of the template.
    }
});


Template.UploadFormLayoutImage.events({
    'change input[type="file"]': function(e, instance) {
        e.preventDefault();
        console.log(instance.data.layoutArea); //Allways returns 'area1'
    }
});

我在这里缺少什么? (这是我的第一个Stackoverflow问题。请保持温和:))

2 个答案:

答案 0 :(得分:0)

如果您将事件方法中的instance.data.layoutArea更改为this.layoutArea

,该怎么办?

答案 1 :(得分:0)

为了使代码示例易于阅读,我删除了导致问题的部分。我在输入字段中使用了标签,因此输入字段有一个id,当然重复模板时,这当然不行。

我现在使用layoutArea-helper作为id值,并且每件事情都可以。

<template name="UploadFormLayoutImage">
    <form class="uploadPanel">
        <input type="file" name="fileupload" id="{{layoutArea}}">
        <label for="{{layoutArea}}">Upload file</label>
    </form>
</template>