我是knockoutjs的新手,我也不是JS大师。我用这个代码在墙上敲我的头,我需要有人帮我重构并让它变干。
HTML Razor 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 :(得分:0)
您可以创建一个GlobalModule函数,一个单独的Js文件并放入其中的所有函数。
然后首先引用GlobalModule文件并开始使用它
GlobalModule.getCity();
我想指出的另一件事是,如果您使用Knockout,那么您应该考虑尽可能少地使用Jquery。
根据上面的代码片段,您可以根据需要使用“attr”绑定来更改Css。
这将使Code更干净,并有助于改善维护。