【问题标题】:Using javascript namespaces with ruby and sinatra在 ruby​​ 和 sinatra 中使用 javascript 命名空间
【发布时间】:2011-04-10 08:21:28
【问题描述】:

我正在尝试为我的网络应用程序创建一些 javascript 验证,并且一切顺利,除了我不希望我的脚本一直寻找要验证的东西。

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

这应该可以通过对象文字来实现,对吧? 像这样的:

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

所以我需要调用这些验证方法,例如validations.page1validation.init(),我想我可以在每个需要验证的表单的 haml 视图中使用内联 javascript 来执行此操作。

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

但必须有更好的解决方案 - 我现在想不出一个。那么你会怎么做才能确保验证器不会一直尝试验证呢?

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

【问题讨论】:

    标签: javascript ruby validation sinatra


    【解决方案1】:

    做你想做的最简单的方法是使表单不同,或者使用不同的 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 库。它提供了一些内置方法,可以使上面的代码变得更小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2013-02-13
      • 1970-01-01
      • 2015-07-07
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多