Ruby 查看访问 angular.js 变量
Ruby view accessing angular.js variable
我在 Ruby .erb 视图中有 angular ng-repeat
。
现在,我需要为一个页面创建一个 link_to,专用于某个 IP 地址。
首先我尝试了
<td><%= link_to '{{ roll.system }}' ,'server/'+'{{ roll.system }}' %></a></td>
,
其中 {{roll.system}}
是包含 ip 的 angular.js 变量。
总体路径类似于 localhost/server/127.0.0.1
,并且由于 IP 地址中的点而无法工作。现在,我正在尝试对 IP 地址进行哈希处理,然后在路由完成后对其进行解码。
我当前的代码是:
<td><%= link_to '{{ roll.system }}' ,"server/"+Base64.urlsafe_encode64('{{ roll.system }} %></a></td>
问题来了。 Base64 按原样对字符串进行编码,创建文字字符串 '{{ roll.system }}'
的散列。我需要它来查找它在 angular 变量中引用的值。
我不明白为什么这是个问题,因为 link_to 工作正常。
请不要提供设计建议 a-la 'rewrite your app from scratch'。
我认为您有点混淆了两个独立的概念 - Rails 视图的呈现和 Angular.
的播放
当您点击您的应用程序时,您的第一个建议将呈现 Rails 视图并将您的 link_to
变成这个原始 HTML:
<td><a href="{{ roll.system }}/server/{{ roll.system }}"></a></td>
一旦 rails 渲染了视图并将页面返回给浏览器,您的 Angular 代码就会启动,找到 {{ roll.system }}
调用并将其修改为如下内容:
<td><a href="127.0.0.1/server/127.0.0.1"></a></td>
第二次尝试的问题是 Base64.urlsafe_encode64
在渲染 Rails 视图 时会 运行 ,所以 Angular 此时不会替换 roll.system
。因此,无论 roll.system
是什么,您最终都会得到这个原始 HTML:
<td><a href="{{ roll.system }}/server/e3sgcm9sbC5zeXN0ZW0gfX0="></a></td>
相反,您可能想尝试对 Angular 中的字符串进行 base64 编码。所以你可能想研究使用像 angular-base64 这样的东西。您可以使用它来执行以下操作:
<td><a href="{{ roll.system }}/server/{{ roll.encoded_system }}"></a></td>
您在 Angular 控制器中设置 roll.encoded_system
的位置。正如 Martin 在下面提到的,有一个原生的 window.btoa() 方法可以用于此。我不完全确定你是否可以直接在模板中使用,它可能仍然需要在控制器中调用。
我在 Ruby .erb 视图中有 angular ng-repeat
。
现在,我需要为一个页面创建一个 link_to,专用于某个 IP 地址。
首先我尝试了
<td><%= link_to '{{ roll.system }}' ,'server/'+'{{ roll.system }}' %></a></td>
,
其中 {{roll.system}}
是包含 ip 的 angular.js 变量。
总体路径类似于 localhost/server/127.0.0.1
,并且由于 IP 地址中的点而无法工作。现在,我正在尝试对 IP 地址进行哈希处理,然后在路由完成后对其进行解码。
我当前的代码是:
<td><%= link_to '{{ roll.system }}' ,"server/"+Base64.urlsafe_encode64('{{ roll.system }} %></a></td>
问题来了。 Base64 按原样对字符串进行编码,创建文字字符串 '{{ roll.system }}'
的散列。我需要它来查找它在 angular 变量中引用的值。
我不明白为什么这是个问题,因为 link_to 工作正常。
请不要提供设计建议 a-la 'rewrite your app from scratch'。
我认为您有点混淆了两个独立的概念 - Rails 视图的呈现和 Angular.
的播放当您点击您的应用程序时,您的第一个建议将呈现 Rails 视图并将您的 link_to
变成这个原始 HTML:
<td><a href="{{ roll.system }}/server/{{ roll.system }}"></a></td>
一旦 rails 渲染了视图并将页面返回给浏览器,您的 Angular 代码就会启动,找到 {{ roll.system }}
调用并将其修改为如下内容:
<td><a href="127.0.0.1/server/127.0.0.1"></a></td>
第二次尝试的问题是 Base64.urlsafe_encode64
在渲染 Rails 视图 时会 运行 ,所以 Angular 此时不会替换 roll.system
。因此,无论 roll.system
是什么,您最终都会得到这个原始 HTML:
<td><a href="{{ roll.system }}/server/e3sgcm9sbC5zeXN0ZW0gfX0="></a></td>
相反,您可能想尝试对 Angular 中的字符串进行 base64 编码。所以你可能想研究使用像 angular-base64 这样的东西。您可以使用它来执行以下操作:
<td><a href="{{ roll.system }}/server/{{ roll.encoded_system }}"></a></td>
您在 Angular 控制器中设置 roll.encoded_system
的位置。正如 Martin 在下面提到的,有一个原生的 window.btoa() 方法可以用于此。我不完全确定你是否可以直接在模板中使用,它可能仍然需要在控制器中调用。