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 に答える