2015-10-10 52 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。

這將使代碼更乾淨,並有助於改善維護。