Curl Global Community
レコード変更イベントが投げられない - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: レコード変更イベントが投げられない (/showthread.php?tid=995)



レコード変更イベントが投げられない - umemura - 10-22-2013

レコードが変更されるたびに合計を計算する処理を考えたのですが、
RecordModified イベントを自分で生成して発行する際にエラーになります。
なぜでしょうか。

■エラー内容
アサーション失敗: 'not self.source.batch-events?'の為、例外Errorで停止

Code:
{let rs:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField "First", domain = String},
            {RecordField "Last", domain = String},
            {RecordField "Age", domain = int}
        },
        {RecordData First = "John", Last = "Smith", Age = 25},
        {RecordData First = "Jane", Last = "Smith", Age = 29},
        {RecordData First = "Jane", Last = "Jones", Age = 28}
    }
}
{value
    {RecordGrid
        height= 2in,
        record-source = rs
    }
}
{def tf = {TextField}}
{HBox "年齢合計", tf}

{do
    {rs.add-event-handler
        {on rm:RecordModified do
            let sum:int = 0
            {for r in rs do
                set sum = sum + r["Age"] asa int
            }
            set tf.value = {String sum}
        }
    }
}

{CommandButton
    label = "年齢合計計算",
    {on Action do
        {with rs.batch-events? = true do
            def new-r = {rs.new-record}
            {rs.append new-r}
            set new-r["First"] = "John"
            set new-r["Last"] = "Smith"
            set new-r["Age"] = 25
            {rs.handle-event {RecordModified new-r}}
        }
    }
}

batch-events?=true の状態でレコード変更イベントは発行できないということのようですね。
{rs.handle-event {RecordModified new-r}} の一文を、with rs.batch-events? = true doの外にだしたら
エラーにならなくなりました。

確かに、「レコード変更イベントをまとめよう」としているのに、
変更イベントを投げたらダメよ、というのは理解できます。




RE: レコード変更イベントが投げられない - LeonardoDiCaprio - 11-20-2013

Nice sharing ...!