这里有一个对KOjs和STOF的菜鸟,有一个问题,
我有一个observable(s),他们的数据是数字0,1,2或3.我希望其他可观察数据保存由这些数据有条件设置的数据。
例如
[ { ServerTypeName: 'App ' },
{ ServerTypeName: 'Oracle ' },
{ ServerTypeName: 'Weblogic ' } ]
我的示例代码段无法按预期运行。
实现保存可观察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
HTML,
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');
}
});
}
作为一个整体的一切工作observables正确声明没有错误,在第一次加载一切看起来没问题。如果<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>
observable已更新,但isText()
未更新以反映更改。如果我在终端中执行控制台日志,则isText()的值是正确的,具体取决于它是否已更新。因此,在初始加载时,如果它为1并且更新为0,则保留值0。
答案 0 :(得分:1)
我猜您的示例不起作用,因为IsSelected
未定义。为了解决这个问题,您可以(并且应该)使用另一个变量名而不是尝试嵌套变量:
db.Tournaments.Include(t => t.Games.Select(g => g.Team1)).ToList();
答案 1 :(得分:1)
我认为你要做的是将一个计算器附加到其父observable。这是我见过的一种技术,我经常被RNiemeyer用来保存更清晰的代码,尤其是在序列化视图模型时。如果是这样,那么我认为您要做的是在formatted.isText
中交换“isText”和“formatted”的顺序。
正如Thibaut Remy的回答已经暗示的那样,你不能将计算结果附加到任何东西,因为“格式化”不是你已基本说过的事情undefined.isText = ko.computed(...)
而是你应该将计算结果附加到现有的observable:this.isText.formatted = ko.computed(...)
,并在绑定中以相似的方式调用它:<span data-bind="text: isText.formatted(), visible: !status().edit()"></span>
。
这是jsfiddle