0

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

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

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

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

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

问题是当我将 的值更改为Keyword不同的值时,可见性没有更新。

我怎样才能让它工作?

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

4

1 回答 1

1

坦率地说,您必须将您的对象映射到可观察对象。这就是淘汰赛能够发挥其魔力的方式。使用映射插件将使这变得微不足道。

$.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'"
于 2012-10-06T03:16:14.300 回答