如何在使用knockoutjs映射插件时删除viewmodel的初始值?

时间:2014-05-27 09:39:48

标签: knockout.js knockout-mapping-plugin

我正在使用knockoutjs映射插件。 我使用插件将数据绑定到viewmodel。 然后我修改数据并提交回来。 提交时,我获取了视图模型的初始值和更改的值。

小提琴在这里:http://jsfiddle.net/jarajesh/HV7g4/3/

   // Here's my data model
var ViewModel = function (data) {
    var self = this;
    ko.mapping.fromJS(data, {}, self);

    self.nameLength = ko.computed(function() {
      return self.firstName().length;
    }, self);
    self.finalstring = ko.observable('');
    self.numberOfClicks = ko.observable(0);
       self.incrementClickCounter = function() {
           var previousCount = self.numberOfClicks();
            self.numberOfClicks(previousCount + 1);
        };

       self.refresh = function() {
           var newData = {'firstName': 'refreshed', 'lastName': 'person'};
           ko.applyBindings(new ViewModel(newData));
        };

    self.save = function () {
        alert(ko.mapping.toJSON(self));
        //$.ajax({
          //  url: "Knockout2/Save",
            //type: "post",
            //contentType: "application/json",
            //data: ko.mapping.toJSON(self),
            //success: function (response) {
              //  alert(response.Status);
            //}
        //});
        //self.finalstring=ko.mapping.toJSON(self);
    };
};

var newData = {'firstName': 'first', 'lastName': 'person'};
ko.applyBindings(new ViewModel(newData));

重现的步骤:

  1. 点击在jsfidle
  2. 中运行
  3. 点击生成的结果页面中的刷新
  4. 点击保存它会抛出4条包含
  5. 的警报消息
  6. 提供的初始值和一个具有修改值和一些对象的值: - )
  7. 我认为这与文档中提供的_destroy有关。

    必需的解决方案:

    1. 如何阻止提交初始值?
    2. 警报中抛出的对象是什么?
    3. 如何将计算属性nameLength包含在submit?

1 个答案:

答案 0 :(得分:1)

在不到5分钟的时间内发布问题我自己得到了答案

必需的解决方案:

  1. 如何阻止提交初始值? 我再次应用数据,这使得这种情况发生了。将代码修改为

    ko.mapping.fromJS(newData, {}, self);
    
  2. 警报中抛出的对象是什么?

    在代码中包含未定义的对象数据。将代码修改为

    alert(ko.mapping.toJSON(self, mapping));
    
  3. 如何将计算属性nameLength包含在提交中?

    var mapping = { 'include': ["nameLength"]};
    
  4. 可以找到更新的小提琴here