繁体   English   中英

在ruby和sinatra中使用javascript名称空间

[英]Using javascript namespaces with ruby and sinatra

我正在尝试为我的Web应用程序创建一些javascript验证,并且一切都进行得很好,除了我不希望我的脚本一直在寻找可验证的内容。

假设我有两件事要验证,但它们不会出现在同一页面上。 它们位于'/page1''page2' ,我不希望我的page1验证程序在page2上运行。

通过对象文字可以做到这一点吧? 像这样:

var validations = 
{
    page1validation :
    {
        init : function()
        {
            // validation page 1
        }
    }
    page2validation :
    {
        init : function()
        {
            // validation page 2
        }
    }
}

因此,我需要调用这些验证方法,例如validates.page1validation.init validations.page1validation.init() ,我想我可以在每个具有所需验证形式的haml视图中使用内联javascript做到这一点。

%form{:action => ""}
  %input{:type => "text"}
  %input{:type => "submit", :value => "save"}
:javascript
  $(function() {
    validations.page1validation.init();
  });

但是必须有一个更好的解决方案-我现在想不出一个解决方案。 那么,您将如何确保验证器不会一直尝试验证?

哦,如果我将javascript放在布局文件的底部,则内联javascript将无法工作...

执行所需操作的最简单方法是使用不同的id或类使表单不同。

然后,您的验证可以利用该差异独立地“定位”每种表单。 使用这种方法,您不需要额外的“命名空间”。 相反,您可以执行以下操作。

$(function() {
  page1validation();
  page2validation();
});

function page1validation() {
  var form = getElementById('form1'); // form1 is the first form
  if(!form) then return;

  // .. perform validations in form 1
}
function page2validation() {
  var form = getElementById('form2');
  if(!form) then return;

  // .. perform validations in form 2
}

另外,我建议您花一些时间来学习jQuery之类的js库。 它提供了一些内置方法,可以使上面的代码更小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM