gpt4 book ai didi

javascript - JQuery Knockout ComputedObservable Write 没有被 ObservableArray 调用

转载 作者:行者123 更新时间:2023-11-30 06:35:22 25 4
gpt4 key购买 nike

我正在尝试绑定(bind)内部使用可观察数组的计算可观察对象。“读取”方法在加载时会被调用。但是当表中的值发生变化和焦点移动时,“write”方法不会被调用。请注意,对于不包装数组而是包装简单字符串的简单计算可观察对象,“write”方法有效。但是对于这种情况,它不起作用。我查看了 Knockout api 文档和在线论坛,但找不到任何相关信息。有人可以请教吗? 以下是HTML代码

        <thead>
<tr><th>People Upper Case Name</th></tr>
</thead>
<tbody data-bind="foreach: uppercasepeople">
<tr>
<td ><input type="text" data-bind="value: name"/></td>
</tr>
</tbody>
</table>

以下是Java脚本代码

    <script type="text/javascript">


var MyViewModel = function () {

var self = this;
var self = this;

//Original observable array is in lower case
self.lowercasepeople = ko.observableArray([
{ name: "bert" },
{ name: "charles" },
{ name: "denise" }
]);

//coputed array is upper case which is data-bound to the ui
this.uppercasepeople = ko.computed({
read: function () {
alert('read does get called :)...yaaaa!!!');
return self.lowercasepeople().map(function (element) {
var o = { name: element.name.toUpperCase() };
return o;
});
},
write: function (value) {
alert('Write does not get called :(... why?????');
//do something with the value
self.lowercasepeople(value.map(function (element) { return element.toLowerCase(); }));
},
owner: self
});


}

ko.applyBindings(new MyViewModel());

我已将代码与 Knockout API 文档中显示的示例类似,以便人们轻松关联。

最佳答案

您拥有的计算可观察对象仅处理数组本身。只有当您尝试直接设置 uppercasepeople 的值时,才会调用 write 函数。

在这种情况下,您可能希望在 person 对象本身上使用可写计算,并使名称可观察。然后,可写计算会将名称转换为大写,并在写入时用小写值填充可观察名称。

关于javascript - JQuery Knockout ComputedObservable Write 没有被 ObservableArray 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14917703/

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