1

問題があるようですが、JSFiddleを使用しています。viewModel.showDetailsでモデル値を返すためにgetter関数を呼び出すことができないようです。私はこの問題をローカルで抱えていません。

ただし、私が実際に実行して解決しようとしているのは、「結果」パネルの上部にあるリストでクリックされた個々の薬剤のテーブル行のみをレンダリングすることです。現在、クリックした薬だけをリストしたいのに、すべての薬をレンダリングしています。

サーバーから返された、処理しているデータを含めました。これは、JavaScriptパネルの上部にあるデータオブジェクトです。

次に、各レコードに「showModal」プロパティを追加します。falseに設定されています。理論的には、これはテーブル内のこのモデルオブジェクトのレンダリングを決定するための私のフラグです。つまり、すべてではなく、この個々のモデルオブジェクトのみを表示したいのです。

テーブルの可視性は、個々のモデルオブジェクト(上のリストからクリックされた薬剤)のshowModalプロパティを切り替える「showDetails」に関連付けられています。これは私がフィドルでゲッターエラーを抱えているところです。

テーブル内のレンダリングを制限する方法を知っている人はいますか?これは私がローカルで取得したものの非常に少ないケースであり、値を取得するために上記のようにobj.showModal()を呼び出せない理由はわかりませんが、これで私が何をしているのかがわかるといいのですが。

4

1 に答える 1

0

修正済み:http://jsfiddle.net/JpJQE/7/:knockout.mapping.jsがこのjsFiddleに読み込まれない場合があります。何らかの理由で、コンピューターがraw.github.comへの接続を拒否します。管理対象リソースを置き換えることができます動作するリンク付き)

あなたは正しい方向に進んでいますが、少し複雑になっています。配列内のすべてのアイテムに新しいプロパティを追加する必要はありません。表示したいアイテムを追跡する必要があります。元:

var viewModel = ko.mapping.fromJS(data);
viewModel.visibleDrug = ko.observable();
viewModel.showDetails = function(drug)
{
    viewModel.visibleDrug(drug.pdlId);
}

ko.applyBindings(viewModel);

また、visibleと同じバインディングでを使用する場合foreach、バインディングはアイテムレベルではなくvisible、親レベルでスコープされます。したがって、これはすべての薬を表示または非表示にします。配列のアイテムを区別するには、バインディングをループ内に配置する必要があります。元:visibleforeach

    <tbody data-bind="foreach: preferredDrugs"> 
        <!-- ko if: $root.visibleDrug() == pdlId -->
            ... repeating content ...
        <!-- /ko -->
    </tbody>

</ p>

于 2012-09-04T20:42:40.377 に答える