我正在从这样的Web API加载数据:
$.getJSON("/api/Rule", function (rules) {
self.Rules(rules);
});
然后我使用foreach绑定将Rules
绑定到表。每个Rule
都有以下属性:Keyword
,Attribute
和Value
。
我想检查Keyword
是否是控制某些控件可见性的特定值。
data-bind="options: viewModel.Attributes, visible : Keyword != 'Else'"
问题是当我将Keyword
的值更改为其他值时,可见性未更新。
如何让它发挥作用?
如果它应该是通过某种绑定,我没有在我的视图模型中声明一个特殊对象,我只是使用从服务器返回的任何东西。
答案 0 :(得分:1)
坦率地说,你必须将你的对象映射到observables。这就是淘汰赛能够发挥其魔力的方式。使用mapping plugin会使这变得微不足道。
$.getJSON("/api/Rule", function (rules) {
var mappedRules = ko.mapping.fromJS(rules);
self.Rules(mappedRules);
});
否则你可以自己映射。
$.getJSON("/api/Rule", function (rules) {
var mappedRules = ko.utils.arrayMap(rules, function (rule) {
return {
Keyword: ko.observable(rule.Keyword),
Attribute: ko.observable(rule.Attribute),
Value: ko.observable(rule.Value)
};
});
self.Rules(mappedRules);
});
请记住,您现在正在处理可观察对象,因此您需要调整绑定。
data-bind="options: viewModel.Attributes, visible : Keyword() != 'Else'"