Knockout.js mvvm验证中的剔除修剪
我使用knockout作为mvvm,它工作正常,但我不想将包含空格的数据发送到服务器端代码。这是我的示例代码Knockout.js mvvm验证中的剔除修剪,knockout.js,knockout-mapping-plugin,knockout-validation,Knockout.js,Knockout Mapping Plugin,Knockout Validation,我使用knockout作为mvvm,它工作正常,但我不想将包含空格的数据发送到服务器端代码。这是我的示例代码 //Regular Customer self.nameForRegularCustomer = ko.observable("").extend({ required: { message: 'Promotion Name is required' }, maxlength: { message: 'Promotio
//Regular Customer
self.nameForRegularCustomer = ko.observable("").extend({
required: { message: 'Promotion Name is required' },
maxlength: {
message: 'Promotion Name can not exceed 100 character',
params: '100'
}
});
self.statusForRegularCustomer = 1; //For create Mode always 1 as new
self.keywordForRegularCustomer = ko.observable("").extend({
required: { message: 'Keyword is required' },
maxlength: {
message: 'Keyword can not exceed 100 character',
params: '100'
}
});
self.promotionMsgForRegularCustomer = ko.observable("").extend({
required: { message: 'Promotion Message is required' }
});
self.promotionDescForRegularCustomer = ko.observable("").extend({
required: { message: 'Promotion Description is required' }
, maxlength: {
message: 'Description can not exceed 100 character',
params: '2000'
}
});
//The Object which stored data entered in the observables
self.RegularCustomerPromotion = {
name: self.nameForRegularCustomer,
description: self.promotionDescForRegularCustomer,
keywords: self.keywordForRegularCustomer,
happyMessage: self.promotionMsgForRegularCustomer,
status: self.statusForRegularCustomer,
promotionCustomerType: self.promotionCustomerType
};
我正在使用以下数据格式进行ajax调用
requestPromo = ko.toJSON(self.NewCustomerPromotion);
但这包含带有空白的数据,我想在进行API调用之前对其进行修剪我试着用它来做场上练习
ko.subscribable.fn.trimmed = function () {
return ko.computed({
read: function () {
return this().trim();
},
write: function (value) {
this(value.trim());
// this.valueHasMutated();
},
owner: this
});
但是这会丢弃验证尝试在视图模型上创建自己的toJSON方法,并自己去掉不必要的空白。knockout有两个函数toJS和toJSON。您可以使用toJS作为javascript对象获取当前值,也可以使用toJSON获取字符串表示 这是我脑子里想不出来的,我不确定它是否有效,但像这样的东西
self.prototype.toJSON = function(){
var data = ko.toJS(self.NewCustomerPromotion);
return {
name: data.nameForRegularCustomer.trim(),
description: data.promotionDescForRegularCustomer.trim(),
keywords: data.keywordForRegularCustomer.trim(),
happyMessage: data.promotionMsgForRegularCustomer.trim(),
status: data.statusForRegularCustomer.trim(),
promotionCustomerType: data.promotionCustomerType.trim()
};
};
这将返回一个对象,该对象已准备好使用要通过线路发送的ko.toJSON进行序列化
这里有一篇博文更详细地解释了谢谢,我用了这个,但下面有什么不同的用法
function removeSpace(object) {
var copy = ko.toJS(object); //easy way to get a clean copy
for (var property in object) {
if (typeof (object[property]) == "function" && property != "errors" && property != "isValid" && property != "isAnyMessageShown") {
copy[property] = object[property]().trim();
}
}
return copy;
};