开发者问题收集

元素之间的渲染(部分)和范围

2018-04-30
191

我有一个结帐弹出窗口,我想在不同的页面(事件、视频会议……)之间共享,因此我想创建一个阴影元素 /views/shared/_checkout.html.erb,并在我的页面中插入 <%= render "shared/checkout" %>。

Uncaught ReferenceError: popup_payment is not defined

所有 html 和 javascript 都是这个共享页面。 我只是不明白为什么从我的页面(事件、视频……)我 无法 从这个共享组件调用 javascript。

当我检查源代码时,html 和 javascript 是存在的。我以为 render / render partial 正在执行一些代码注入,我错了吗?

我如何在 ERB 中保留 DRY - 不要重复自己 - ? 并且让元素/javascript 在页面和包含的 javascript 之间进行通信?

以下是一些伪代码示例: pageA.html.erb

<%= link_to image_tag('pinandchip.png', size: '18x18'), '#', onclick: 'popup_payment();', class: "btn flat" %>

...

view/shared/_popup.html.erb

<script>
function popup_payment() {
}
</script>
3个回答

您可以尝试将类 payment-popup-button 添加到您的按钮,并在 app/assets/javascripts/shared 中创建一个名为 popup.js 的新文件。

在该文件中,您可以执行以下操作:

$(document).ready(function(){
  $('payment-popup-button').click(function(e){
     e.preventDefault();
     $('#popup_payment_div').show();
  });
});

这假设您正在使用 jQuery ,并且您已经在页面的某个地方呈现了弹出代码,但它是隐藏的。

如果您每次都需要呈现一个新表单或使用动态数据填充表单,您可能必须创建控制器操作 respond_torender js.erb 来获取正确的标记。

如果没有看到更多代码,很难确切地说。

NM Pennypacker
2018-04-30

您是否确保您的 javascript 函数已在所有页面中加载?

在此 问题 中回答如何在 rails 项目上使用全局 javascript 函数。

facundo espinosa
2018-04-30

我找到了一个解决方案:

https://github.com/komposable/komponent

它满足了我的需求:创建外部组件

Gregoire Mulliez
2018-05-10