gpt4 book ai didi

javascript - knockout 计算的可观察写入不适用于包含原子可观察的普通对象

转载 作者:行者123 更新时间:2023-11-28 08:18:43 25 4
gpt4 key购买 nike

我已经从简单的可观察量创建了一个计算可观察量,如下所示:

  • this.fullDetails 是计算的可观察量。
  • this.computeFullDetails 是计算的读取函数。
  • this.writeToComponents 是计算的写入函数。

当我修改与原子可观察量相对应的输入框时,计算属性会被修改,但是当我修改计算属性时,原子属性不会更新。我可以采用替代方法来完成类似的事情吗?

请看这个 fiddle http://jsfiddle.net/saurabh0jha/wqpZ9/

function PersonViewModel()
{
this.firstName = ko.observable("");
this.lastName = ko.observable("");
this.phoneNos = ko.observable(0);
this.address = ko.observable("");
this.computeFullDetails = function(){
retObj = {};
retObj.firstName=ko.observable(this.firstName());
retObj.lastName=ko.observable(this.lastName());
retObj.phoneNos=ko.observable(this.phoneNos());
retObj.address=ko.observable(this.address());
return retObj;
};

this.writeToComponents = function(value){
this.firstName(value.firstName());
this.lastName(value.lastName());
this.phoneNos(value.phoneNos());
this.address(value.address());
};

this.fullDetails = ko.computed(
{
read:this.computeFullDetails,
write:this.writeToComponents,
},this);

}


var vm = new PersonViewModel();
ko.applyBindings(vm);

HTML

<html lang='en'>
<head>
<title>Hello, Knockout.js</title>
<meta charset='utf-8' />
<link rel='stylesheet' href='style.css' />
</head>
<body>
<h2>atomic</h2>
<input data-bind="value: firstName" style="display:block" />
<input data-bind="value: lastName" style="display:block"/>
<input data-bind="value: phoneNos"style="display:block" />
<input data-bind="value: address" style="display:block"/>
<h2>computed</h2>
<input data-bind="value: fullDetails().firstName" style="display:block"/>
<input data-bind="value:fullDetails().lastName" style="display:block"/>
<input data-bind="value: fullDetails().phoneNos"style="display:block" />
<input data-bind="value: fullDetails().address"style="display:block" />

<script type='text/javascript' src='knockout-2.2.0.js'></script>
<script type='text/javascript' src='2computedObservables.js'> </script>
</body>
</html>

最佳答案

不确定您要做什么。

您的代码存在的问题是您没有订阅在 computeFullDetails 中返回的可观察量。

你可以试试这个:

<input data-bind="value: fullDetailsFirstName" style="display:block" />

this.fullDetailsFirstName = ko.computed({
read: function () {
return self.firstName();
},
write: function (newValue) {
self.firstName(newValue)
}
});

示例(仅更改名字): http://jsfiddle.net/nyothecat/VJ4th/1/

关于javascript - knockout 计算的可观察写入不适用于包含原子可观察的普通对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com