0

我有一个带有可观察数组的淘汰模型,试图调用删除函数但说“删除”是未定义的。这是一个有效的方法:

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

通过将 remove 函数移出模型本身来解决此问题,即在淘汰模型的函数中没有 this.reportFields.remove(etc) 我调用了一个外部函数并将其更改为 model.reportFields.remove(etc)

我认为是因为对象是使用模型推送的。在外部,我必须为它的其他相关功能做同样的事情。

于 2012-09-21T08:59:28.520 回答