在流星中将变量从父模板传递到子模板

Posted

技术标签:

【中文标题】在流星中将变量从父模板传递到子模板【英文标题】:Passing variable from parent template to child template in meteor 【发布时间】:2016-03-26 15:52:49 【问题描述】:

我有一个父模板,里面有几个嵌套的子模板。在每个嵌套模板中,我都有一个从数组生成的字符串。我的 html 的简化模型:

<template name="parent">
   <a class="logId">Console log parent Id</a>
   > firstChild
   > secondChild
</template>

此外,我的子模板有一个这样的 each 循环:

<template name="firstChild">
   #each users
      this
      > adminSelectUser
   /each
</template>

<template name="adminSelectUser">
   <a class="selectUser">SelectUser</a>
</template>

在我的 js 代码中:

Template.parent.events(
    'click .logId': function () 
       var eventId = this._id._str;
       console.log(eventId);
);

Template.adminSelectUser.events(
   'click .selectUser': function(template)
      var userString = this.valueOf();
      console.log(userString);
    
 );

到目前为止,我让它工作,在我的两个模板中,我都可以找到我父母的 id 和我想要的用户字符串。但是我还想在同一个方法调用中使用我的变量 eventId 和 userString,从模板 adminSelectUser 调用。有什么方法可以将在父模板中找到的 eventId 传递给 adminSelectUser 模板,以便我可以使用相同的方法调用来处理这两个变量。

这就是我的服务器方法的目标:

Meteor.methods(
    removeUser: function()
       Meets.update(_id: eventId, $pull : usersApplied: userString);
  
); 

我希望我的服务器方法能够识别 eventId 和 userString,并在我稍后在 adminSelectUser 模板中调用该方法时让它们一起工作。

希望这已经足够清楚了!

【问题讨论】:

查看类似问题 - ***.com/questions/10128053/… 【参考方案1】:

有几种方法可以解决这个问题。

    使用Template.parentData

    您可以使用 Template.parentData(n) 从模板 JS 中遍历模板层次结构,其中 n 是您想要在层次结构中向上移动的层数。所以专门针对您的示例:

    Template.adminSelectUser.events(
      'click .selectUser': function(template)
        var user = this;
        var parentId = Template.parentData(2)._id;
    
        myRemoveMethod(parentId, user);
      
    );
    

    然而,这意味着内部模板依赖于总是在同一层次结构中呈现,这有点难闻。如果模板紧密耦合并且是这种情况(很可能),那么使用parentData 可能就可以了。但是,如果模板具有数据依赖关系,则显式传递适当的数据是有意义的(参见 #2)。

    将数据显式传递到模板中。

    <template name="firstChild">
      #each users
        this
        > adminSelectUser user=this parent=..
      /each
    </template>
    

    在您的示例中,当您不向模板渲染传递任何参数时,数据上下文被假定为this。在这里,我们将userparent 传递到模板中(注意这里使用.. 来引用用户循环之外的this)。你的处理程序看起来更像:

    Template.adminSelectUser.events(
      'click .selectUser': function() 
        var data = Template.currentData();
        myRemoveMethod(data.parent._id, data.user);
      
    );
    

【讨论】:

以上是关于在流星中将变量从父模板传递到子模板的主要内容,如果未能解决你的问题,请参考以下文章

在django中将动态变量从父模板传递给子模板

在Android中将变量从父视图传递到子视图

如何在 Vue JS 中将更新的值从父组件发送到子组件?

Angular 2如何将变量从父组件传递到路由器出口

将动态插槽从父级传递到子级到孙子级

通过 uinavigationcontroller 将变量从父视图传递到子视图