4

を使用して生成されたアイテムの値を設定するために、ボタンのクリック イベントを使用していますforeach

<table>
   <tbody data-bind="foreach: Employees">
   <a  data-bind="click:$parent.delete()">
..

削除機能で値を設定していますが、画面が更新されません

 Delete :(emp) {
  emp.active=false;
}

私が作成するとき、個々のプロパティをすべて監視可能に設定していますが、foreach ループではそうではないようです。

  • アップデート

従業員はフィルタリングされます。

var Employees=ko.computed(function() {
 return ko.utils.arrayFilter(AllEmployees(), function (empid) {
            return empid.ID == filter();
        });
4

3 に答える 3

3

オブザーバブルを取得/設定するときは、次のように呼び出す必要があります。

var val = obj.prop(); //Getter
obj.prop(false); //Setter

もう 1 つの問題は、クリック バインディングで括弧を使用していることです。Knockout バインディングは単なる JavaScript であるため、バインド時に実際にその式を実行することに注意してください。

これらの括弧を取り除く必要があります。そうしempないと、最初は未定義になります。

アップデート:

この jsFiddle を更新して、上に示したものと同様の 3 つのフィルター処理されたリストを含めました。計算されたものを介してフィルター処理されたリストを使用しても、ノックアウトがバインディングを処理する方法に影響がなく、UI がシームレスに更新されることがわかります。

http://jsfiddle.net/jwcarroll/ceRPK/

于 2013-08-01T21:19:16.037 に答える
1

オブザーバブルを設定するには、それを呼び出す必要があります (オブザーバブルは関数として実装されるため)。

emp.active(false);

メソッドは、オブザーバブルを上書きするだけです。

于 2013-08-01T21:19:44.930 に答える
0

Knockout はオブザーバブル配列にサブスクライブしますが、その配列内の各オブザーバブルにはサブスクライブしません。個々のプロパティをサブスクライブする場合は、myObservable.subscribe() を使用して手動でサブスクライブする必要があります

Knockout はオブザーバブル配列にサブスクライブしますが、その配列内の各オブザーバブルにはサブスクライブしません。個々のプロパティを購読したい場合は、 myObservable.subscribe() を使用して手動で購読する必要があります

編集

計算されたものを計算して追跡しようとしている場合は、次のようにすることができます-

var allEmployees = ko.observableArray([my data goes here]);

var Employees=ko.computed(function() {
 return ko.utils.arrayFilter(allEmployees(), function (emp) {
            return emp.active === true;
        });
});

これは、active が各 allEmployees() の監視可能なプロパティでない場合に機能します。それがオブザーバブルである場合は、それを-に変更するだけです

var allEmployees = ko.observableArray([my data goes here]);

var Employees=ko.computed(function() {
 return ko.utils.arrayFilter(allEmployees(), function (emp) {
            return emp.active();
        });
});
于 2013-08-01T21:19:24.147 に答える