【问题标题】:knockout trim in mvvm validationsmvvm 验证中的淘汰赛修剪
【发布时间】:2014-05-01 11:42:28
【问题描述】:

我使用敲除作为 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
});

但这会丢弃验证

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin knockout-validation


    【解决方案1】:

    尝试在您的视图模型上创建自己的 toJSON 方法并自己去除不必要的空白。淘汰赛有两个函数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 序列化的对象,以便通过网络发送。

    这里有一篇博文详细解释http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html

    【讨论】:

    • 感谢我使用了这个,但使用以下方式有些不同
    【解决方案2】:
     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;
     };
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2011-08-09
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2012-12-05
      • 2012-03-08
      相关资源
      最近更新 更多