Ember.js 如何引用 Grunt.js 预编译的 Handlebars 模板?

2024-01-04

我一直在探索 Ember.js 以及 Grunt.js,但我无法理解 Ember.js 如何找到并使用预编译的 Handlebars 模板。现在我的 Gruntfile.js 看起来像这样:

module.exports = function(grunt) {

// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
handlebars: {
  compile: {
    files: {
       "js/templates.js": "templates/*.hbs",
    }
  }
}
});

// Load the plugin that handles the handlebars compiling
grunt.loadNpmTasks('grunt-contrib-handlebars');

// Default task(s).
grunt.registerTask('default', ['handlebars']);

};

我的 app.js Ember 视图是这样声明的(路由和控制器被省略):

App.LogoView = Ember.View.extend({
  templateName: 'logo',
  classNames: ['logo']
});

App.TabsView = Ember.View.extend({
  templateName: 'tabs',
  classNames: ['tabs']
});

App.TabView = Ember.View.extend({
  classNames: ['content'],
  tabPositions: {
    tab1: {
      width: '90px',
      left: '82px'
    },
    tab2: {
      width: '180px',
      left: '172px'
    },
    tab3: {
      width: '271px',
      left: '263px'
    }
  },
  animateTab: function() {
    var left, tab, width;
    tab = this.get('templateName');
    width = this.get('tabPositions.' + tab + '.width');
    left = this.get('tabPositions.' + tab + '.left');
    Ember.run.next(function() {
      $('div.tabs').removeClass('tab1 tab2 tab3');
      $('div.tabs').addClass(tab);
      $('div.slider div.foreground').stop().animate({
        'width': width
      }, 1000);
      $('div.slider div.handle').stop().animate({
        'left': left
      }, 1000);
    });
  },
  didInsertElement: function() {
    this.animateTab();
  }
});

App.SliderView = Ember.View.extend({
  templateName: 'slider',
  classNames: ['slider']
});

App.Tab1View = App.TabView.extend({
  templateName: 'tab1'
});

App.Tab2View = App.TabView.extend({
  templateName: 'tab2'
});

App.Tab3View = App.TabView.extend({
  templateName: 'tab3'
});

这是我的文件结构:

--/
  |--js/
    |--app.js
    |--ember.js
    |--handlebars.js
    |--jquery.js
    |--templates.js
  |--templates/
    |--application.hbs
    |--logo.hbs
    |--slider.hbs
    |--tab1.js
    |--tab2.js
    |--tab3.js
    |--tabs.js
  |--Gruntfile.js
  |--index.html
  |--package.json
  |--server.js

所以我正在使用<script type="text/x-handlebars" data-template-name="slider">我的 index.html 文件中的语法按名称引用模板,效果很好。我不明白的是 Ember.js 应该如何使用预编译模板。

现在,我正在使用 Grunt.js 来编译它们,并将它们输出到 templates.js。根据 Ember 文档,当应用程序加载时,它将查找应用程序模板。它如何与index.html一起使用并通过更改模板的文件名来更改模板的名称?有人能给我指出 Ember.js 如何使用预编译模板的正确方向吗?谢谢!


我不明白的是 Ember.js 应该如何使用预编译模板。

Ember 希望编译后的模板将添加到 Ember.TEMPLATES 属性中。当加载 ember 应用程序时,它会检查是否有任何把手脚本标记并编译它们。然后将每个模板添加到Ember.TEMPLATES使用指定的 data-template-name 属性作为键。如果未提供数据模板名称,则它们的键将设置为应用程序。

除此之外,余烬并不关心事情如何进入Ember.TEMPLATES。您可以手动添加/删除模板。例如,https://stackoverflow.com/a/10282231/983357 https://stackoverflow.com/a/10282231/983357演示如何内联编译模板:

Ember.TEMPLATES['myFunkyTemplate'] = Ember.Handlebars.compile('Hello {{personName}}');

现在显然你不想以这种方式编写模板,你希望 grunt 为你做这件事,但正如你所看到的,没有什么神奇的事情发生......

根据 Ember 文档,当应用程序加载时,它将查找应用程序模板。它如何与index.html一起使用并通过更改模板的文件名来更改模板的名称?

Ember 不关心模板的文件名,它只关心使用什么字符串作为 keyEmber.TEMPLATES['key/goes/here']。也就是说,使用文件名作为模板的键很有意义。

有人能给我指出 Ember.js 如何使用预编译模板的正确方向吗?

我认为您的项目中缺少的可能是编译的模板没有被添加到Ember.TEMPLATES。据我所知grunt-contrib-handlebars插件不执行此操作。考虑使用grunt-ember-模板 https://github.com/dgeb/grunt-ember-templates反而。

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

Ember.js 如何引用 Grunt.js 预编译的 Handlebars 模板? 的相关文章

  • 使用javascript在谷歌地图中绘制多边形

    我想在谷歌地图中绘制多边形 我正在使用示例代码http jsfiddle net rvsMH 1 http jsfiddle net rvsMH 1 但它不起作用并且没有获取数组或纬度 经度值 我不知道出了什么问题
  • jqgrid 在编辑框中选择不正确的下拉选项值

    我正在使用表单编辑 表单中有两个选择框 一个选择框是国家 地区 另一个选择框是州 州选择框取决于所选的国家 地区 并将动态填充 例如 Country 美国 期权价值 1 英国 期权价值 2 美国的状态 阿拉巴马州 选项值 1 加利福尼亚州
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • 如何在 jQuery 中使用 CSS“background-image”属性添加的图像上绑定单击事件

    这是我的小提琴link http jsbin com otisur 1 edit 我想我的问题通过标题本身就很清楚了 尽管如此 我正在寻找一种绑定的方法click使用 css 添加的图像上的事件background image财产 我知道
  • 从 JavaScript 将参数传递给 p:remoteCommand

    我想将值传递给remoteCommand来自 JavaScript 如果这是可能的 我该如何做到这一点以及如何在支持 bean 中接收它们 对的 这是可能的 如何执行此操作取决于 PrimeFaces 版本 你可以在PrimeFaces 用
  • 从 url 角度加载模板并在 div 内编译

    由于我是 Angular JS 的新手 我想知道如何加载外部模板并将其与一些数据一起编译到目标中div 例如我有这个模板
  • 设置股票数据 Highcharts xAxis 的格式

    我已经浏览了需要为 xAxis 属性设置的 Highcharts 选项来格式化时间标签 但没有运气了解这对于这种情况到底是如何工作的 我在白天 盘中 检索了股票的动态数据 我需要显示这些数据 因为检索的数据每天从 9 30 开始到 17 0
  • 如何按值删除数组中的多个项目?

    我正在尝试做一个removeAll 函数 它将删除具有该特定值 而不是索引 的数组的所有元素 当我们对循环进行任何更改时 棘手的部分就出现了 索引往往会移动 使其很难像我们想要的那样工作 并且每次更改时都重新启动循环 这在大数组上效率非常低
  • 两个日期之间间隔 15 分钟 javascript

    问题 我需要将两个日期 时间戳之间的所有 15 分钟时隙 日期格式 2016 08 10 16 00 00 创建为 HH mm 格式的数组 其中分钟限制为 00 15 30 45 示例 中午 12 30 到下午 2 30 将 gt 12 3
  • 是否可以让 webpacks System.import 使用 ajax (用于进度事件)?

    所以我刚刚更新到 webpack 2 并进行了第一个工作设置 其中 webpack 通过查看 System import 调用自动创建块 相当甜蜜 但是 我使用 ajax 调用加载初始块 以便我可以加载时显示进度 https stackov
  • select 元素是否具有标准值属性?

    这是一个简单的问题 但我找不到任何参考资料 所以就在这里 假设我有一个选择元素
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 如何在 JavaScript 中从代理对构造 UTF-16 字符?

    以下计算 Unicode 代码点的 UTF 16 代理对 戴着医用口罩的脸 https emojipedia org face with medical mask 但是如何从代理对构造字符以在字符串中使用呢 const codepoint
  • Axios GET 返回不可读的响应

    我有一个带有 axios 1 2 0 的简单 GET 的 Express 应用程序 const result AxiosResponse await axios get https jsonplaceholder typicode com
  • 在 React JSX 中返回配对元素

    问题 在 React 中 您希望通过映射数组来创建 DOM 结构 但数组中的每个项目应返回 2 个元素 例如 import React from react import from lodash let Component React ex
  • 使用任何节点模块在内存中创建 ZIP 文件

    是否有任何节点模块可以在内存中创建 zip 我不想将 zip 文件保存在磁盘上 以便我们可以将这个创建的 zip 文件发送到其他服务器 从内存 做这个的最好方式是什么 这是我的例子 var file system require fs va
  • 如何在 JSP 编辑器中激活 javascript 的语法着色 - Eclipse

    在某些情况下 javascript 确实必须位于 JSP 页面中 而不是位于单独的文件中 有些框架还使用Javascript做一些事情 以便用户将其包含到JSP标签中 这样JS就不会出现在
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter
  • 允许 iframe 跨域链接到目标父框架

    我有 2 个域 域 1 上的一个页面使用 iframe 加载域 2 中的内容 如何允许来自domain2 iframe 内 的链接在domain1 的完整父框架中打开 我一直在关注IE和w3c的新沙箱属性 http www w3 org T
  • 将一维数组转换为二维数组[重复]

    这个问题在这里已经有答案了 我正在开发一个程序 我必须将文本文件中的值读入一维数组 我已经成功获取该一维数组中的数字 m1 1 2 3 4 5 6 7 8 9 但我希望数组是 m1 1 2 3 4 5 6 7 8 9 您可以使用此代码 co

随机推荐

  • 获取上次重新启动时间[重复]

    这个问题在这里已经有答案了 可能的重复 显示构建日期 https stackoverflow com questions 1600962 displaying the build date 如何知道 Windows 何时启动或关闭 http
  • 声明全局静态变量

    我正在尝试在 Visual Studio 中设置全局变量 但无法将其设为静态 有什么方法可以让我将变量设置为静态并在不同的方法之间共享它 或者有什么方法可以在每次更改时保存变量 您有两个选择 1 创建一个包含共享变量的类 这与 C 中的静态
  • 摆脱新 Android 上的旧应用程序图标

    前段时间我做了一个简单的 Android 应用程序 一个上传数据的共享意图处理程序 现在我为它设计了一个新的 SVG 图标 以矢量图形导入到项目中 然后使用 InkScape 转换为一系列 PNG 并替换项目中的所有 PNG 该应用程序现在
  • 使用 SparkSession 或 sqlcontext 时出错

    我是火花新手 我只是想使用sparksession 或sqlcontext 解析json 文件 但每当我运行它们时 我都会收到以下错误 Exception in thread main java lang NoSuchMethodError
  • 无法在 /usr/bin 内部创建符号链接,即使使用 sudo [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我尝试对 usr bin 文件夹中的二进制文件进行符号链接时 出现 操作不允许 错误 sudo ln s usr bin python2
  • 在两个进程之间交换大量数据的最有效方法是什么?

    最近我正在为一个软件构建DVR http en wikipedia org wiki Digital video recorder 它将安装在插入了 2 个或更多 PCIE x4 视频编码器卡的 x86 PC 服务器上 我们有两个独立的进程
  • 单击标签时阻止 select2 打开

    这个问题演变成了阻止按下回车键时打开下拉菜单 正如你所看到的 我丑陋的解决方案用一个关闭下拉菜单setTimeout当标签输入具有焦点时按 Enter 键 如何防止它在输入时完全打开 而不是在打开后关闭它 以下是一些可能有用的事件 http
  • 顶部“xterm”:未知终端类型

    运行 TOP 命令时出现错误 gt top xterm unknown terminal type gt echo TERM xterm gt echo DISPLAY DYSPLAY Undefined variable gt cat e
  • 当 HTML5 搜索输入可见时,嵌入的 YouTube 视频无法在 iPad (iOS 7) 上播放

    这是一个错误 我已经设法通过暴力修复 但我不明白为什么该解决方案有效 问题在于 嵌入式 YouTube 视频无法在 iPad 在 iOS7 中测试 的横向视图中的特定 响应式 网站上运行 我设法将其范围缩小到一个特定的 CSS 规则 当浏览
  • C# 8.0 默认接口实现基本语法/显式调用

    我一直在搞乱默认的接口实现 认为您必须向下转换为接口类型才能使用默认方法实现 我还发现了一堆关于另一种语法的注释 我找不到这是否已经包含在内 我确实找到了关于它的外观的 决定 但是它不起作用 我做错了吗 还是这个新语法尚未包含在内 有些相关
  • 如何将 matplotlib 图导出为具有可编辑文本字段的矢量图形?

    我正在尝试导出多个绘图以在 Adob e Illustrator 中进行编辑 并且尝试将标题 轴标签和条形图标签作为单独的文本字段 即 如果我单击 Illustrator 或您选择的编辑器 中的标题 整个标题就是一个单独的字段 以下是我如何
  • C# - 无法处理 Enter 和 Tab 键事件

    我是新的 c 我正在使用下面的代码 但该代码不适用于 Enter 键和 Tab 键 请解决这个问题 private void Panel Load object sender EventArgs e this KeyDown new Key
  • 对于给定的二叉树找到最大二叉搜索子树

    对于给定的二叉树 找到最大的子树也是二叉搜索树 Example Input 10 50 150 25 75 200 20 15 35 65 30 120 135 155 250 Output 50 25 75
  • Powershell 文本搜索 - 多个匹配项

    我有一组 txt 文件 其中包含以下一个或两个字符串 red blue green orange purple 列表中还有更多 50 多种 可能性 如果有帮助 我可以判断 txt 文件是否包含一项或两项 但不知道它们是哪一项 字符串模式始终
  • catch(...) 中的 throw 是按值还是按引用抛出

    我的老板回答了这个问题为什么catch块中存在 三点 https stackoverflow com questions 36737602 why three points in catch block is exist 36738071
  • C++11 使用 OpenGL 进行多线程渲染可防止主线程读取 stdin

    它似乎与平台相关 适用于我的笔记本电脑上的 Ubuntu 12 04 不适用于我的工作站上的另一个 Ubuntu 12 04 这是关于我使用两个线程所做的事情的示例代码 include
  • 在 C/C++ 中连接字符串

    如何使用 C C 连接字符串 我尝试了以下方法 PS errorInfo是一个char 我应该返回它 errorInfo strcat Workflow strcat workflowToString workflow utf8 strca
  • Gradle执行dex错误命令行太长

    我正在使用 gradle 在 Windows 上构建 Android 应用程序 当涉及到最后一个模块时 我面临以下错误 What went wrong Execution failed for task client test dexApi
  • 使用 Ruby 迭代 JSON 并获取数组中的键、值

    我在处理这个 JSON 时遇到了一些问题 ENAX BRANCHESM 10 repo test ASO PATH tmp pruebaAlvaro ARTIFACTS example1 jar another one jar and an
  • Ember.js 如何引用 Grunt.js 预编译的 Handlebars 模板?

    我一直在探索 Ember js 以及 Grunt js 但我无法理解 Ember js 如何找到并使用预编译的 Handlebars 模板 现在我的 Gruntfile js 看起来像这样 module exports function g