Knockout.js 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

我使用knockout作为mvvm,它工作正常,但我不想将包含空格的数据发送到服务器端代码。这是我的示例代码

   //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;
 };