0

監視可能な配列を持つノックアウト モデルがあり、remove 関数を呼び出そうとしていますが、「remove」は未定義であると言っています。これが機能するものです:

this.reportGroups.remove(function (item) { return item.fieldId == data.fieldId });

そして、これがエラーを与えるものです:

this.reportFields.remove(function (item) { return item.FieldId == data.FieldId });

それらは両方ともobservableArraysであり、アイテムが含まれています。渡された値が有効であり、FieldIdなどが含まれていることを確認したので、さらにデバッグする方法がわかりませんか?

編集:

配列に入るモデル:

function FieldItem(FieldId, TableId, GroupId, PositionInGroup, FieldName, FieldType, FriendlyName, Description, QueryNumber) {
        return {
            FieldId: FieldId,
            TableId: TableId,
            GroupId: GroupId,
            PositionInGroup: PositionInGroup,
            FieldName: FieldName,
            FieldType: FieldType,
            FriendlyName: FriendlyName,
            Description: Description,
            QueryNumber: QueryNumber
        };
    }

それらは reportFields observableArray にプッシュすることで追加され、次のように呼び出される関数を削除します。

<!-- ko foreach: reportFields -->
<tr>
   <td><span data-bind="text: FriendlyName"></span></td>
   <td><img src="SystemImages/cross.png" data-bind="click: $parent.removeField" /></td>
</tr>
<!-- /ko -->
4

2 に答える 2

0

コードのどこかで reportFields の型が observableArray 以外に変更されていると思われます。このようにコードを変更してみてください

this.reportFields().remove( ..... )

それが機能する場合、 reportFields が observableArray ではないことは確かです

于 2012-09-21T08:19:38.870 に答える
0

モデル自体から削除関数を移動することでこれを修正しました。つまり、ノックアウト モデルの関数内に this.reportFields.remove(etc) を配置する代わりに、外部関数を呼び出して model.reportFields.remove(etc) に変更しました。

モデルを使用してオブジェクトをプッシュしたためだと思います。外部的には、他の関連する機能についても同じことをしなければなりません。

于 2012-09-21T08:59:28.520 に答える