对KOjs和STOF有点菜,有一个问题,我有一个可观察对象,它们的数据是数字0、1,2或3。我希望其他可观察对象保存此数据有条件设置的数据。例this.isText = ko.observable(data.isText);this.formatted.isText = ko.computed(function() { var it = self.isText(); if (it == '0') { return 'No'; } else if (it == '1') { return 'Yes' } else { return 'Not Specified' } });我的示例代码片段未按预期运行。实现持有可观察的isText格式文本版本的正确方法是什么?如何创建对象,function ListItem(data) { this.isText = ko.observable(data.isText); this.formatted.isText = ko.computed(function() { var it = self.isText(); if (it == '0') { return 'No'; } else if (it == '1') { return 'Yes' } else { return 'Not Specified' } });}this.loadList = function(data) { // console.log(data); $.getJSON('someLoader.php', { checklistID: data.id, checklistRev: data.rev }, function(json, textStatus) { if (textStatus == 'success') { for (var i = 0; i < json.length; i++) { model.formData.push(new ListItem(json[i])); } } else { console.log('Error Competing Request'); } }); }HTML,<td colspan="1"> <select class="form-control" data-bind="visible: status().edit, value: isText()"> <option value="1">Yes</option> <option value="0">No</option> </select> <span data-bind="text: formated.isText(), visible: !status().edit()"></span></td>可以观察到的所有东西都可以正确地声明为没有错误,在第一次加载时一切看起来都还不错。如果isText()可观察对象得到更新,则formatted.isText()不会更新以反映更改。如果我在终端上执行isText()的控制台日志,则值是否正确取决于它是否已更新。因此,在初始加载时,如果它是1,并且已更新为0,则它​​将保留值0。 最佳答案 我认为您要执行的操作是将计算值附加到其父级可观察值。我见过RNiemeyer经常使用这种技术来保持更干净的代码,尤其是在序列化视图模型时。如果是这样,那么我认为您想做的就是交换formatted.isText中“ isText”和“ formatted”的顺序。正如Thibaut Remy的答案所暗示的那样,您不能将计算对象不附加任何内容,并且由于“格式化”已经不是一回事,您基本上是在说undefined.isText = ko.computed(...)相反,您应该将计算对象附加至现有的可观察对象:,并在绑定中以类似的方式调用它:this.isText.formatted = ko.computed(...)。这是一个jsfiddle
09-11 06:55