2

对于我的一个模型,我有一个简单的 ondelete 事件处理程序:

  function validateStateDeletion(record){
    if (record.Name===STATE_SUBMITTED || record.Name===STATE_CLOSED){
      throw 'Cannot delete internal states '+STATE_SUBMITTED+' and '+STATE_CLOSED;
  }

这确实有效,并且可以防止满足条件的记录被删除。我看到错误被传播回客户端(它在开发控制台中显示为异常)。但是,捕获异常以向用户显示某些内容,使用 window.onerror 作为应用程序初始化脚本的一部分,似乎没有任何效果(这可能不是正确的 Window 对象,因为在开发控制台中未定义 window.onerror ,它可能是执行客户端脚本的一些沙盒 iframe)。

  window.onerror=function(message, url, line, column, error){
    window.toastr.error("Error:" +(message||error));
    return false;
  };

问题:对 AppMaker 中的全局异常处理有什么见解,或者显示服务器端验证错误的替代方法?

4

1 回答 1

3

>> AppMaker 中的全局异常处理

afaik 现在没有这样的机制

>> 或显示服务器端验证错误的替代方法?

这里我们至少有3个案例

1调用服务端函数

 google.script.run
       .withSuccessHandler(function(result) {   
         // TODO
       })
       .withFailureHandler(function(e) {
          // TODO
        })
       .MyServerSideFunction();

2触发任何与数据相关的操作(createItem、saveChanges、deleteItem、load、reload...等)

widget.datasource.createItem({
  success: function (somethingThatDependsOnActionType) {
    // TODO
  },
  failure: function (e) {
    // TODO
  }
});

3 在自动保存模式下更改数据源的项目

app.datasources.Employees.item.Name = 'Bob';

Afaik 在这种情况下没有很好的方法来处理错误。希望它会尽快修复。暂时作为解决方法,您可以将数据源切换到手动保存模式并将成功+失败处理程序传递给 saveChanges 回调

于 2016-12-20T17:15:02.383 回答