【问题标题】:breeze error trying delete a entity尝试删除实体的微风错误
【发布时间】:2013-07-12 07:28:18
【问题描述】:

我是微风新手,我正在尝试使用此代码删除一个实体:

export var deleteRow= function (selectedRow) {
   isDeleting(true);
   selectedRow.entityAspect.setDeleted();
   (<any>datacontext).saveChanges()
       .done(
        function () {
           router.replaceLocation(listUrl);
         })
       .fail(saveFailed);
    //}
  isDeleting(false);
};

数据上下文是:

 export var saveChanges = function () {
    return manager.saveChanges()
        .then(saveSucceeded)
        .fail(saveFailed);

    function saveSucceeded(saveResult) {
            log('Saved data successfully', saveResult, true);
    }

    function saveFailed(error) {
        var msg = 'Save failed: ' + getErrorMessages(error);
        logError(msg, error);
        error.message = msg;
        throw error;
    }
};

错误发生在一行:

selectedRow.entityAspect.setDeleted();

日志(chrome 控制台)说明:

“未捕获的错误:无法解析绑定。 消息:TypeError:无法调用 null 的方法“字典”; 绑定值:文本:row.assessmentType().dictionary().name "

在我的标记中使用它的别名来标识我的集合中的行的对象行:

 <!-- ko foreach: { data: assessmentRegistrations(), as: 'row' }-->
                    <tr data-bind="css: { koAssumptionGridViewRow: true }, style: { color: 'inherit' }">                                   
                        <td><small data-bind="text: row.toShortDate"></small></td>
                        <td><small data-bind="text: row.fishgroup().fishgroupName"></small></td>
                        <td><small data-bind="text: row.assessmentType().dictionary().name"></small></td>                                   
                        <td><small data-bind="text: row.site().name"></small></td>
                        <td><small data-bind="text: row.site().name"></small></td>                                      
                        <td></td>                                  
                        <td><small data-bind="text: row.assessmentFollowUpStatus().dictionary().name"></small></td>                           
                    </tr>

感谢任何帮助:)

【问题讨论】:

    标签: javascript knockout.js breeze


    【解决方案1】:

    不确定是什么问题,但我会先尝试隔离它。即不涉及任何淘汰绑定尝试调用 setDeleted()。我敢打赌,这会成功。如果是这样,那么您知道该问题是淘汰赛绑定问题。

    另一种可能性:问题是否可能在 saveChanges() 调用之后实际发生?考虑到您的症状,这样做有意义的原因是“已删除”实体在 saveChanges() 调用后变得“分离”并且绑定到它很可能会失败。

    【讨论】:

    • 我删除了我的 html 视图中的所有绑定代码,是的,你说得对,它正在工作,所以这是一个淘汰赛问题。这里奇怪的是为什么我现在遇到问题来运行该行(setDeleted())......
    • 另一种可能性是,当您调用 setDeleted() 时,Breeze 有效地将您的实体与其与其他实体的所有关系断开连接。所以我的猜测是你的导航属性在调用 setDeleted() 之后开始返回 null 并且 ko 无法绑定到这个,特别是如果你尝试访问属性的属性,即 row.site().name where row.site === 空;
    • 好吧,我所做的有点不同。从我的数据上下文中,我得到了要删除的对象的 ID,然后我调用我的 api 控制器来删除对象及其子对象(每个父对象大约 140 行)。无论如何,我会将您的答案标记为正确。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2012-11-10
    • 1970-01-01
    • 2013-03-22
    • 2014-11-02
    • 2013-04-05
    相关资源
    最近更新 更多