4

如果我在 Meteor 中有一个 {{# each}} 绑定,并且我想只更新 #each 中模板的一个实例上的属性。我该怎么做?我尝试在事件映射内的“模板”对象上设置一个值,但这似乎不是反应性的。我也尝试绑定到 Session 属性,但这会导致每个实例都更新,而不仅仅是我想要的...

例如:

{{#each dates}}
    {{> dateTemplate}}
{{/each}}

<template name="dateTemplate">
    {{date}}
    <span style="color: red;">{{errorMsg}}</span> <--- how do i update errorMsg?
</template>

Template.dateTemplate.events({
    'click': function(event, template) {
        template.errorMsg = 'not valid'; <--- this doesn't do anything
    }
});

编辑以解决以下问题:

Template.dateTemplate.events({
    'click': function(event, template) {
        template.errorMsg = function() { return 'not valid';} <--- this also doesn't do anything
    }
});
4

3 回答 3

1

您不必为此使用把手,因为它不需要反应性来传递消息,反应性变量最适合用于 db 数据或将由另一个客户端通过无线方式更新的数据。

您可以使用 JQuery(默认包含)来更新它,它也可以变得更漂亮:

<template name="dateTemplate">
    {{date}}
    <span style="color: red;display: none" class="errorMessage"></span>
</template>

Template.dateTemplate.events({
    'click': function(event, template) {
        $(template.find('.errorMessage')).html('Your Error Message').slideDown();
    }
});

我已经对其进行了编辑,因此默认情况下会隐藏错误,并通过动画向下滑动

于 2013-02-08T07:15:51.723 回答
1

我正在尝试通过将不同的反应对象传递给模板的每个实例来处理这个问题。然后模板可以绑定到反应对象(每个实例都是唯一的),我们没有任何额外的样板。

它最终看起来像这样:

初始渲染:

Template.firstTemplateWithPoll(ContextProvider.getContext())
Template.secondTemplateWithPoll(ContextProvider.getContext())
// (I actually pass getContext an identifier so I always get the same context for the same template)

JS:

Template.poll.events = {
    'click .yes' : function() {
        this.reactive.set('selection', 'yes');
    },

    'click .no' : function() {
        this.reactive.set('selection', 'no');
    }
};

Template.poll.selection = function(arg) {
    return this.reactive.get('selection');
}

模板:

<template name="poll">
    <blockquote>
        <p>
            Your selection on this poll is {{selection}}
        </p>
    </blockquote>
    <button class='yes'>YES</button>
    <button class='no'>NO</button>
</template>
于 2013-05-27T16:13:30.927 回答
0

template.errorMsg应该是一个返回错误的函数。

Template.dateTemplate.events({
    'click': function(event, template) {
        template.errorMsg = function() { return 'not valid'; };
    }
});
于 2013-02-08T10:59:32.113 回答