我们有一个应用程序的一个良好的金额最初JSON呼吁服务器方的代码。因此,我们有大量的结合代码,以分析答复和结合适当的价值观的形成。这是一个两部分的问题。

  1. 是什么建议的方法为处理大数量的形式,所有具有不同的数据。现在都正试图采取一个结构化的方法在设立一个js"类"每一页,与init,wireClickEvents等。尝试有的一切一致。

  2. 是否有任何"最佳做法"创建的重复。或任何类型的建议结构比其他的只是扔一堆的功能在js的文件?

有帮助吗?

解决方案

不是100%确定如你所要求,但就个人而言,和我使用MochiKit,我建JavaScript"类"(或部件,如果你喜欢)对于每一个重大的客户-侧UI结构。这些知道,当然,如何填充自己的数据。

我不知道什么更有说写UI码的浏览器在JavaScript是没有什么不同于编写UI代码,用于其他类型的应用程序,作为我感到关切。建立类和化他们的需要,填充数据,把他们扔事件,等等。等等。

我在晚上这个吗?:)


编辑:换句话说,是的-不你在做什么,大部分。我看到太多的新手JavaScript黑客写一堆差的-有凝聚力的职能,似乎不是一个部分的任何特定的其他比他们都是在一个单一的文件。希望这是有道理的。

其他提示

你也许应该看成一个框架喜欢 knockout.js 这种方式可以就更新你的模型和形式将自动更新。

我觉得有多个夏兰奇给你。第一个问题是如何构javascript code,即如何构建的名字空间所以你不打名称冲突或具有名字你能喜欢

form1validate
form1aftersubmit
form2validate
form2aftersubmit

一经验证的模式,用于模块在javascript是使用匿名的功能建立一个新命名的范围。基本的想法是shon在以下代码

(function() {
  var foo = 1;
})();

(function() {
  if(foo == 1) alert("namespace separation failed!")
})();

我认为这 博客入口 是一个很好的介绍。

第二个问题你面对的是如何避免所有重复在javascript code.你有几个武器来对付这个。

  1. 职能-这个接缝显而易见的,但它往往被遗忘的重构共同编码进入功能在那里可以做到的。在你的情况下,这将是功能复制的价值观从id应的形式和喜欢这样
  2. 高阶功能或功能的数据或调回,因为他们通常被称为在javascript。这些都是最强大的武器在javascript。在情况下,为形成和阿贾克斯的操作你可以使用回调,以避免重复在控制流动的形式。

让我构造的一个例子,我的头(的使用jquery为大)

// this is a validator for one form
   var form1validator = function() {
     if($("input[name=name]",this).attr("value").length < 1 &&
        $("input[name=organisation]",this).attr("value").length < 1)
       return "Either name or organisation required" 
   }

   // and this for a second form
   var form2validator = function() {
     if($("input[name=age]",this).attr("value").length < 21
       return "Age of 21 required"
   }

   // and a function to display a validation result
   var displayResult = function(r) {
     $(this).prepend("<span></span>").text(r);
   }

   // we use them as higher order functions like that

   $("#form1").onSubmit(validator(form1validator, displayResult, function() {
     //on submit
     ...send some xhr request or like that
   });

   $("#form2").onSubmit(validator(form2validator, displayResult, function() {
     this.submit() // simply submit form
   });

   $("#form1b").onSubmit(validator(form1validator, function(r) {
     alert("There was an validation error " + r);
   }, function() {
     //on submit
     ...send some xhr request or like that
   });


   // the validator function itself would be defined as

   function validator(formValidator, displayResult, onSubmit) {
     var r = formValidator.apply(this)
     if(typeof(r) === 'undefined')
       onSubmit(this)
     else
       displayResult(r)
   }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top