带有客户端 haml 的 angularjs

2024-01-04

我刚刚开始在 Rails 应用程序中使用 AngularJS,并且由于我习惯在 Rails 中使用 haml 模板,所以我想在客户端对 AngularJS 执行相同的操作。问题是我不知道在 haml 文件中读取哪里。

我有一个供投资者使用的模型,我正在尝试将“show”模板转换为 haml,因为它是最容易开始的。

这是我与 show 相关的 AngularJS 代码

投资者咖啡网

  # Setup the module & route
  angular.module("investor", ['investorService'])
    .config(['$routeProvider', ($provider) ->
      $provider
        .when('/investors/:investor_id', {templateUrl: '/investors/show.html', controller: 'InvestorCtrl'})
    ])
    .config(["$httpProvider", (provider) ->
      provider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')
    ])

  angular.module('investorService', ['ngResource'])
    .factory('Investor', ($resource) ->
      return $resource('/investors/:investor_id.json', {}, {
        show: {method: 'GET'},
      })
    )

  angular.bootstrap document, ['investor']  

这是我的控制器 AngularJS 代码

Investors_controller.js.coffee

# Show Investor
window.InvestorCtrl = ($scope, $routeParams, Investor) ->
  html = haml.compileHaml({sourceId: 'simple'})
  $('#haml').html(html())

  investor_id = $routeParams.investor_id
  $scope.investor = Investor.show({investor_id: investor_id})

在后端我有一个 Rails JSON API。

这是它读入的 show.html 文件

<script type="text/haml-template" id="simple">
  %h1 {{investor.name}}
</script>

<div id="haml"></div>

<h1>{{investor.name}}</h1>

<p>
  <b>Total Cost</b>
  {{investor.total_cost}}
</p>

<p>
  <b>Total Value</b>
  {{investor.total_value}}
</p>

<a href='/investors/angular#/investors/{{investor.id}}/edit'>Edit</a>
<a href='/investors'>Back</a>

最终我想要一个 .haml 并将其传递给 templateURL 并让 haml_coffee_assets 插件在 AngularJS 开始查看动态字段并更改内容之前对其进行编译。

Ref: https://github.com/netzpirat/haml_coffee_assets https://github.com/netzpirat/haml_coffee_assets

目前,这将转换 haml 并将其放入 id 为 haml 的 div 中。然而,AngularJS 不会将 haml 代码中的 {{investor.name}} 更改为投资者的名字,因为操作为时已晚。

如何在这样的 AngularJS 项目中正确实现客户端 haml 模板?


您可以将所有 Haml 模板放入 asset/templates 文件夹中。然后,您可以使用以下命令连接资产管道来为 Haml 提供服务:

Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate

然后您的所有模板都可以从 /assets/(template name).html 获取

如果您希望能够在 Haml 模板中包含 Rails 助手,您可以定义一个自定义模块并使用它:

module CustomHamlEngine
  class HamlTemplate < Tilt::HamlTemplate
    def evaluate(scope, locals, &block)
      scope.class_eval do
        include Rails.application.routes.url_helpers
        include Rails.application.routes.mounted_helpers
        include ActionView::Helpers
      end

     super
    end
  end
end

Rails.application.assets.register_engine '.haml', CustomHamlEngine::HamlTemplate

这会将所有 Rails 助手添加到模板的范围中。然后你可以将模板 url 传递给 Angular,它会自动为你完成所有的腿部工作!

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

带有客户端 haml 的 angularjs 的相关文章

随机推荐

  • 在matlab中将GML文件转换为邻接矩阵

    我有一个GML http en wikipedia org wiki Graph Modelling Language有向图文件 政治博客 http www personal umich edu mejn netdata polblogs
  • 结合 grid.arrange 删除两个 ggplot 之间的所有空间

    我想粘贴两个图 主题之间没有任何空间 因此它们共享一个轴 Given p1 lt qplot 1 1 xlab p1 lt p1 theme legend position none axis text x element blank ax
  • struts 2 在调用堆栈中找不到名称为[excelStream]的java.io.InputStream

    excelStream我正在尝试下载 Excel 文件 在我的动作课上 public class ActivityTrackerExlReportAction extends BaseAction private InputStream e
  • 如何在 fop 生成的 pdf 中显示预先格式化的文本?

    有谁知道如何显示预格式化的 html 文本 例如 ol li item 1 li li item 2 li li item 3 li ol 在用 fop 生成的 pdf 中 Thanks 这个 XSLT 1 0
  • MFC:CFormView 派生类的 OnInitialUpdate 函数

    我的 CFormView 派生类的结构如下 class FormViewClass public CFormView FormViewClass void Initialize virtual void OnInitialUpdate 理想
  • 了解开关条件下的寄存器用法

    我有一个 C 语言的开关条件代码和汇编代码 但对我来说设置什么似乎非常随意 edx或eax或ecx 如何区分 edx epx ecx ebp 之间的区别 就连教科书也没有给我足够的解释 include
  • 作为启动 RDP 程序运行时如何停止初始表单最大化?

    当主机和客户端都是 XP Pro 计算机时 在终端服务 远程桌面 会话中启动时 我的 VB6 应用程序中的启动表单表现得很奇怪 该表单本来是要居中的 但实际上它最大化了 并且其内容位于左上角 看起来很奇怪 请注意 只有当应用程序路径用于 R
  • 在 VTable 上下文中,虚拟方法调用和直接方法调用有什么区别?

    在 VTable 上下文中 虚拟方法调用和直接方法调用有什么区别 在虚拟和直接调用的情况下如何解决方法引用 理论上 不存在这样的东西 C 标准没有定义它 定义了虚拟调用 但没有指定它们必须如何工作 不存在像VTable这样的东西 在实践中
  • 计算 R 中矩阵的成对差异数

    我有以下矩阵 0 1 0 0 0 1 0 0 Row A 0 1 0 0 0 0 1 0 Row B 0 1 0 0 0 0 0 0 Row C 0 0 1 0 0 0 0 0 Row D 我想制作一个新的矩阵 显示每行之间的成对差异 例如
  • GHC生成的.hi、.p_hi和.dyn_hi文件有什么区别

    我正在尝试减少包含 Nix 派生的存档的大小 我注意到每个模块都有 3 个文件 hi p hi 和 dyn hi 大小都相似 ghc 提示 解释器只需要 hi 如果我删除其余变量 则什么也不会发生 那么 p hi 和 dyn hi 是沙袋吗
  • 在 Django 中使用 formset_factory

    我是 Django 的新用户 我使用以下代码生成表单 class GetMachine forms Form Machine Name forms CharField max length 20 Number of lines forms
  • 如何限制Python 3中多线程程序中的API调用?

    经过大量研究 我不确定最佳实践是什么 我的以下想法是否合适 我想要访问一个 API 该 API 将我可以进行的调用总数限制为每分钟 50 次 我的程序有多个独立运行的线程 如何限制我的程序保持在阈值以下 我的想法是创建一个队列 并每 X 秒
  • 优化与未优化构建的 KCachegrind 输出

    I run valgrind tool callgrind executable在由以下代码生成的可执行文件上 include
  • 未知的底部 blob“数据”(层“conv1”,底部索引 0)

    尝试在我自己的数据集上训练 LeNet 我从长一维矢量数据集生成了 HD F5 文件 并创建了 HDF5 数据层 如下所示 我对顶部 blob 的命名与生成 HDF5 时的命名相同 name Test net layer name data
  • 导出大型 MySql 表

    我在 MySql 中有一个表 我使用 PhpMyAdmin 进行管理 目前约有 960 000 行 我有一个老板喜欢看Excel中的数据 这意味着每周我都要将数据导出到Excel中 我正在寻找一种更有效的方法来做到这一点 因为我实际上无法一
  • Pattern.matches() 针对 char 数组,无需在 java 中转换为 String

    Scenario 我需要根据字符数组检查正则表达式模式 char 出于安全考虑 我不允许将字符数组转换为字符串 Java 的 Pattern matches 方法旨在获取模式和字符串 另外 正则表达式模式是从另一个来源传递给我的 并且会发生
  • AWS ELB 中的双栈前缀是什么意思?

    当我在 AWS Route 53 中添加 ELB 作为别名目标时 它会自动添加dualstack我的 ELB DNS 的前缀 这代表什么 当我尝试时dig 两者都返回相同的端点 注意 这是一个内部负载平衡器 The dualstackDNS
  • 可以让 WinDBG 在符号存储中找到 mscordacwks.dll 吗?

    问题 有很多手动方法可以让 WinDBG 在没有符号存储的情况下找到 mscordacwks dll 将文件放在某个路径中 将其放在与 Windbg exe 相同的文件夹中 将其放在我的 Framework v 文件夹中 在使用WinDBG
  • 图书馆的数据库架构

    我正在为我的大学的一个部门设计一个图书馆管理系统 我想吸引您关注我提出的架构 这篇文章主要涉及我们如何存储每本书的多个副本 我设计的一些东西让我感到不舒服 我希望你们都能指出更好的方法来解决问题 为了处理用户借书的情况 我设计了三个表 bo
  • 带有客户端 haml 的 angularjs

    我刚刚开始在 Rails 应用程序中使用 AngularJS 并且由于我习惯在 Rails 中使用 haml 模板 所以我想在客户端对 AngularJS 执行相同的操作 问题是我不知道在 haml 文件中读取哪里 我有一个供投资者使用的模