2015-10-10 55 views
-1

我是新来的knockoutjs,我也不是JS大师。我用这段代码将我的头撞在墙上,我需要有人帮助我重构并使其干燥。Knockout JS重构

HTML剃刀ASP.NET MVC

@Html.TextBoxFor(m => m.Zip, new { @maxlength = "10", @class = "form-control",@data_bind = "value: zip, event:{ keyup: $root.getCity, keydown: $root.inputnumeric}" }) 

ViewModel(options) {} 
    self.inputnumeric= function (data, event) { 

      var key = event.keyCode; 
      if (!((key == 8) || (key == 46) || (key >= 35 && key <= 40) || (key >= 48 && key <= 57) || (key >= 96 && key <= 105))) { 
       return false; 
      } 
      return true; 
     } 

     self.getCity = function (data, event) { 
      var target = event.target; 
      var value = target.value; 
      var data = { 
       zipCode: value 
      } 
      if (value.length < 4) { 
       $(target).removeClass('valid').addClass('error'); 
      } else if (value.length > 4) { 
       $(target).addClass('error').removeClass('valid'); 
      } else if ((value.length == 4)) { 

       $.getJSON(self.options.cityapiurl, data, function (result) { 

        if (result.success) { 
         self.city(result.cityName); 


         $('#City').addClass('valid').removeClass('error'); 
         $(target).addClass('valid').removeClass('error'); 

        } else { 
         $(target).addClass('error').removeClass('valid'); 
         $('#City').addClass('error').removeClass('valid'); 

        } 

       }) 
        .error(function() { alert("error hapens"); }); 

      } 
     }; 

现在我有这样的一个viewmodel.js。

但我也有140个其他js文件几乎相同的代码。

如何让这些文件之间共享某些东西。

所以,我有seft.city和self.inputnumeric基地kllas所以没有必要复制粘贴文件140

+0

我投票结束这个问题作为题外话题,因为它要求代码审查。你可以看看[codereview.se],但一定要查看[他们的常见问题](http://codereview.stackexchange.com/help/on-topic),因为你的问题目前有一些问题,使它可能他们也会关闭它(出于其他原因)。 – Jeroen

回答

0

的代码,你可以创建一个GlobalModule功能,一个单独的js文件,并把所有的功能在那里。

然后第一参考GlobalModule文件,并开始用它像

GlobalModule.getCity();

另一件我想指出的,如果你使用Knockout,那么你应该尽可能少地考虑使用Jquery。

根据上面的代码片段,您可以使用“attr”绑定来根据需要更改Css。

这将使代码更干净,并有助于改善维护。