knockout js根据属性值更新可见性

时间:2012-10-05 17:59:11

标签: knockout.js

我正在从这样的Web API加载数据:

$.getJSON("/api/Rule", function (rules) {
    self.Rules(rules);
});

然后我使用foreach绑定将Rules绑定到表。每个Rule都有以下属性:KeywordAttributeValue

我想检查Keyword是否是控制某些控件可见性的特定值。

data-bind="options: viewModel.Attributes, visible : Keyword != 'Else'"

问题是当我将Keyword的值更改为其他值时,可见性未更新。

如何让它发挥作用?

如果它应该是通过某种绑定,我没有在我的视图模型中声明一个特殊对象,我只是使用从服务器返回的任何东西。

1 个答案:

答案 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'"