我怎样才能使用Knockoutjs""上下文并只更新一个绑定值?

时间:2017-11-29 21:35:13

标签: knockout.js

我可以轻松更新所有值,但如果我只想更新一个目标值,则会清除其他值。

在我的代码段中,您可以取消注释下面的行以查看我的问题。

self.mainform({"AdultCount" : "test"});

在设置嵌入式代码片段时,我发现它返回了一个脚本错误,但我不确定为什么会发生这种情况。

请指出我的方法中哪些不正确?



var ViewModel = function() {
      var self = this;
    
      self.mainform = ko.observable(new FormModel());
      
      //self.mainform({"AdultCount" : "test"});
    };
    
    var FormModel = function() {
      var self = this;
    
      self.AdultCount 			= ko.observable("2"); 
      self.PG1FName 				= ko.observable("PG1FName");
      self.PG1LName 				= ko.observable("PG1LName");
    }
    
    ko.applyBindings(new ViewModel());

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<form data-bind ="with: mainform">
  <input data-bind = "value: AdultCount">
  <input data-bind = "value: PG1FName">
  <input data-bind = "value: PG1LName">
</form>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您使用新对象覆盖整个FormModel,并且新对象没有其他两个字段,因此它们将为空白,并且还会抛出脚本错误,因为淘汰可以&#39 ; t绑定到不存在的东西。

要更改FormModel中单个属性的值,您需要访问该属性。你可能想要这样的东西:

//self.mainform({"AdultCount" : "test"});
self.mainform().AdultCount("test");

&#13;
&#13;
var ViewModel = function() {
      var self = this;
    
      self.mainform = ko.observable(new FormModel());
      
      self.mainform().AdultCount("test");
    };
    
    var FormModel = function() {
      var self = this;
    
      self.AdultCount 			= ko.observable("2"); 
      self.PG1FName 				= ko.observable("PG1FName");
      self.PG1LName 				= ko.observable("PG1LName");
    }
    
    ko.applyBindings(new ViewModel());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<form data-bind ="with: mainform">
  <input data-bind = "value: AdultCount">
  <input data-bind = "value: PG1FName">
  <input data-bind = "value: PG1LName">
</form>
&#13;
&#13;
&#13;