关于删除功能的Knockout错误混淆

时间:2012-09-21 08:09:31

标签: knockout.js

我有一个具有可观察数组的淘汰模型,试图调用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 -->

2 个答案:

答案 0 :(得分:0)

我怀疑在您的代码中的某些位置,reportFields的类型已更改为observableArray以外的其他内容。 尝试更改像这样的代码

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

如果可行,则可以确定reportFields不是observableArray

答案 1 :(得分:0)

通过将remove函数移出模型本身来解决这个问题,即不是在挖掘模型的函数中使用this.reportFields.remove(etc)而是调用外部函数并将其更改为model.reportFields.remove(等等) )

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