使用 Iron-Router 模板内的上下文

2023-12-13

我无法理解exactlyMeteor 使用 Iron-Router 调用的模板中的上下文可用作我的上下文,以及这些内容如何继承。

以下是我能想到的“我可以在双花括号内引用的内容”的所有潜在来源:

  • 内置助手
  • Handlebars.registerHelper(...)
  • Template.myTemplate.myVar/myHelper = ...
  • Template.myTemplate.helpers({ ... })
  • data: { ... }内部路线(Router.map)
  • 与某件事有关#each?
  • 与某件事有关#with?

我是不是忘记了什么?有全局变量吗?

我想我对首先为模板提供上下文的标准方法有点困惑。还有关于控制结构内部发生的事情,例如#each and #with.

如果能得到澄清就太好了!


IronRouter 使用 RouteController.data 的结果作为当前数据上下文来渲染您的模板。

<template name="viewPost">
   <div>
        <h1>{{title}}</h1>
        <p>{{content}}</p>
    </div>
</template>

var PostsController=RouteController.extend({
    template:"viewPost",
    waitOn:function(){
        return Meteor.subscribe("postsById",this.params._id);
    },
    data:function(){
        return Posts.findOne(this.params._id);
    }
});

this.route("viewPost",{
    path:"/posts/:_id",
    controller:PostsController
});

在此示例中,IronRouter 将渲染“viewPost”模板,其中帖子将 this.params._id 作为数据上下文。

首先为模板提供上下文的标准方法是什么?

有2种方法:

{{#with myContext}}
    {{> myTemplate}}
{{/with}}

{{> myTemplate myContext}}

如您所见,#with 控制结构设置当前数据上下文。 #each 结构迭代游标(或数组)并将当前数据上下文设置为当前获取的文档(或当前单元格)。

<template name="postsList">
    {{#each posts}}
        <h1>{{title}}</h1>
    {{/each}}
</template>

Template.postsList.helpers({
    posts:function(){
        // cursor
        return Posts.find();
        // array
        return [{title:"Title 1"},{title:"Title 2"},{title:"Title 3"}];
    }
});

更新:您能否添加有关继承的注释?例如,如果我嵌套了 #each 块,变量会级联吗?

我想出了这个例子:

<template name="parent">
    <ul>
        {{#each parentContexts}}
            {{> child}}
        {{/each}}
    </ul>
</template>

<template name="child">
    <li>
        <ul>
            {{#each childContexts}}
                {{> content}}
                <p>../this.parentProperty = {{../this.parentProperty}}</p>
            {{/each}}
        </ul>
    </li>
</template>

<template name="content">
    <li>
        <p>this.childProperty = {{this.childProperty}}</p>
        <p>this.parentProperty = {{this.parentProperty}}</p>
    </li>
</template>

Template.parent.helpers({
    parentContexts:function(){
        return [{
            parentProperty:"parent 1"
        },{
            parentProperty:"parent 2"
        }];
    }
});

Template.child.helpers({
    childContexts:function(){
        return [{
            childProperty:"child 1"
        },{
            childProperty:"child 2"
        }];
    }
});

如果运行此示例,您会注意到无法访问“content”中的parentProperty,因为默认的#each帮助程序使用提供的新上下文覆盖父数据上下文。

您可以使用以下语法访问嵌套#each 块中的parentProperty:../this.parentProperty,这让人想起UNIX 父目录访问语法。

但是,您不能在“内容”模板中使用此语法,因为它与调用它的嵌套每个结构无关:您只能在实际发生嵌套的模板中使用 ../../parent 语法。

如果我们想要访问内容模板中的parentPropery,我们必须使用父上下文来扩充当前数据上下文。

为此,我们可以注册一个新的 #eachWithParent 助手,如下所示:

Handlebars.registerHelper("eachWithParent",function(context,options){
    var parentContext=this;
    var contents="";
    _.each(context,function(item){
        var augmentedContext=_.extend(item,parentContext);
        contents+=options.fn(augmentedContext);
    });
    return contents;
});

现在,如果您用这个新的助手替换嵌套的#each,您将可以访问“content”中的父属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Iron-Router 模板内的上下文 的相关文章

随机推荐

  • SQL 计数和组

    我有一个与此类似的 MySQL db 表 id date class more info one more info two etc 1 2017 05 03 1 2 2017 05 03 3 3 2017 05 11 1 4 2017 0
  • 在客户端验证行比使用整个主键的二级索引更好?

    在 cassandra 中 众所周知 应该非常谨慎地使用二级索引 例如 如果我有一张桌子 User username usertype email etc 这里的用户名是分区键 现在我想支持当且仅当 usertype 是特定值 X 时返回特
  • 接收方未注册异常错误?

    在我的开发者控制台中 人们不断报告一个错误 我无法在我拥有的任何手机上重现该错误 一个人留言说 当他们尝试打开我的电池服务的设置屏幕时 他收到了消息 正如您从错误中看到的 它表明接收器未注册 java lang RuntimeExcepti
  • Facebook API:所有朋友共享的所有链接?

    访问所有用户 Facebook 好友共享的链接的最实用方法是什么 我希望抓取由经过身份验证的用户的朋友共享的少数域的所有链接 有没有办法询问 域 X 的所有链接 所有链接 我将过滤域 X 或者我是否需要获取每个朋友并解析每个单独的提要 我假
  • T-SQL 读取带有命名空间的 xml 文件

    我尝试读取 sql server 中的 xml 文件 DECLARE XMLToParse XML Load the XML data in to a variable to work with This would typically b
  • TypeScript 2:非类型化 npm 模块的自定义类型

    尝试后发布的建议其他地方 我发现自己无法运行使用非类型化 NPM 模块的打字稿项目 下面是一个最小的示例和我尝试的步骤 对于这个最小的例子 我们假设lodash没有现有的类型定义 因此 我们将忽略该包 types lodash并尝试手动添加
  • 如何更改powershell控制台中的光标位置

    我目前将当前的 CursorPosition 分配给 Powershell 中的一个变量 以便在脚本中执行倒计时时可以覆盖相同的空间 如下所示 errorPos host UI RawUI CursorPosition for i 5 i
  • 在 Core Data 应用程序中更新 NSTableView 的正确方法

    我有一个带有 NSTableView 的核心数据项目 其中列绑定到 NSArrayController 反过来 控制器的内容绑定到 AppDelegate 的主要托管对象上下文 我对 NSTextFieldCell 进行了子类化 以提供更定
  • 访问和操作环境对象中的数组项

    我有一个EnvironmentObject我用来生成一个列表 class ActivityViewModel ObservableObject Published var Activities Activity init self Acti
  • Tableview的Plist搜索

    I have Plist它已填充在带有扩展部分的表格视图上 现在我想搜索表格 下面的图像中 您可以看到当我搜索任何内容时发生的情况 只是因为我正在搜索它 但需要对 cellforrowatindexpath 进行一些更改以获取搜索结果 请检
  • 在Java中按键排序HashMap的最佳方法?

    这是我第一次必须订购HashMap在爪哇 我需要按键执行此操作 但在我的情况下 键是一个对象 因此我需要按特定字段进行排序 尝试自己解决这个问题 我考虑继续编写这个简单的代码 private HashMap
  • 以 Map 作为主体的 Dart HTTP POST

    飞镖http包 s post方法只接受一个String a List
  • 同步期间出错:管道损坏 - 更新 Android Studio 3.2、3.3 后

    将 Android Studio 更新到 3 2 并解决同步 gradle 问题后Gradle 同步失败 将 Android Studio 更新到 3 2 后 我无法安装apk 事件日志 Error during Sync Broken p
  • 如何检索 WiFi Direct MAC 地址?

    我正在尝试检索 Android 设备的 MAC 地址 如果 WiFi 已打开 这通常可以通过 WiFiManager API 实现 如果 WiFi 关闭且 WiFi Direct 打开 有什么方法可以获取 MAC 地址吗 我的手机上无法同时
  • 如何将多个Excel文件合并为一个Excel文件

    所以我试图制作一个 Excel 表格聚合器 在我的工作中 有人向我们发送一堆单独的 Excel 文件 这些文件都是相关的 每个文件只使用了一张纸 我在某种程度上遵循上一篇文章的想法 但这样做后 我复制的一些 Excel 工作表变成了空白 只
  • 我可以创建宽度为百分比高度但像素精确的行高的 HTML 表格吗?

    我需要在网页上创建一个有两行的表 该表格需要填充整个页面 因此我在 CSS 样式表中将表格的高度和宽度设置为 100 并将 HTML 和正文的高度也设置为 100 但是 我需要将表格顶行的高度精确为 100 像素 并扩展第二行以适合表格的其
  • 在模板化嵌套和继承类中未检测到变量

    我有一个像这样的嵌套和继承的结构 template
  • 仅使用给定符号创建固定长度的唯一 ID?

    我试图了解如何在 python 中创建一组固定长度 例如长度 12 的唯一 ID 它使用所有字母数字字符的特定子集 这里的用例是这些 ID 需要被人们读取并在打印文档中引用 因此我试图避免使用字符 L I O 和数字 0 1 我当然需要能够
  • AWS Route 53 - 到应用程序负载均衡器不同端​​口的域名路由

    我们正在AWS中实施微服务架构 我们有几个 EC2 实例 它们将微服务部署在不同的端口上 我们还有一个面向互联网的应用程序负载均衡器 它根据端口路由到不同的服务 eg xxxx xx xx elb amazonaws com 8080 go
  • 使用 Iron-Router 模板内的上下文

    我无法理解exactlyMeteor 使用 Iron Router 调用的模板中的上下文可用作我的上下文 以及这些内容如何继承 以下是我能想到的 我可以在双花括号内引用的内容 的所有潜在来源 内置助手 Handlebars register