gpt4 book ai didi

Meteor:是否有一个响应式每个模板范围?

转载 作者:行者123 更新时间:2023-12-03 14:49:08 26 4
gpt4 key购买 nike

我在同一页面上的多个(任意多个)位置呈现相同的 Handlebars 模板。在每个模板中,我想要一个按钮来切换 div 的可见性。当我用 Session.set 保存这个状态时,单击一个按钮显然会切换所有不需要的模板实例中的所有 div。

我可以将状态保存在模板实例的数据上下文中(在 this.dataTemplate.myTemplate.rendered 回调中绑定(bind)到 Template.myTemplate.created),但是这样做有两个问题。

  • this.data不是响应式数据源,因此不会传播到 div
  • 我无权访问 Template.myTemplate.events 中的模板实例(如 meteor-core 上所讨论的)

  • 最后,我可以以某种方式将其保存到集合中。但是我将如何唯一标识每个呈现的模板的状态? jQuery 也可能有一种 hacky 方式,但这不是我想要开发应该使用响应式模板的 Meteor 应用程序的方式。特别是当该模板变得更加复杂时。

    我是否遗漏了什么,或者真的没有与 AngularJS Controller 等效的通过 $scope对于每个模板实例化?

    更新 :
    我在想这样的事情。

    模板.html:
    <template name="jsonObject">
    <input type="button" />
    <div class="{{hidden}}">content</div>
    </template>

    客户端.js:
    Template.jsonObject.hidden = function(){
    var ret = "";
    if (this._hidden) {
    ret = "hidden";
    }
    return ret;
    };

    Template.jsonObject.events({
    'click input' : function(event, template){
    template.data._hidden = true;
    }
    });

    最佳答案

    所有其他答案都太复杂和/或过时了。从 Meteor 1.0 开始,维护每个模板状态的推荐解决方案是使用 reactive variables存储在 template instance :

    A template instance object represents an occurrence of a template in the document. It can be used to access the DOM and it can be assigned properties that persist as the template is reactively updated. [...] you can assign additional properties of your choice to the object.



    react 变量由 reactive-var core package 提供:

    A ReactiveVar holds a single value that can be get and set, such that calling set will invalidate any Computations that called get, according to the usual contract for reactive data sources.



    您的代码变为:

    Template.jsonObject.onCreated = function () {
    this.hidden = new ReactiveVar(false);
    };

    Template.jsonObject.helpers({
    hidden: function () {
    return Template.instance().hidden.get() ? 'hidden' : '';
    }
    });

    Template.jsonObject.events({
    'click input': function (event, template) {
    template.hidden.set(true);
    }
    });

    HTML 与您期望的相同:

    <template name="jsonObject">
    <button>Click Me</button>
    <p>Hidden is {{hidden}}.</p>
    </template>

    关于Meteor:是否有一个响应式每个模板范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752142/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com