在Starcounter DB中更新数据,将更新推送到活动会话?

时间:2016-04-22 09:48:00

标签: starcounter

比如说我在Starcounter中声明了这样的东西

[Database]
public class User 
{
    public string Username;
    public string Email;
} 

我有一个页面,列出了DB中的一行,并带有PuppetJS的更新按钮,所有工作正常。

如果我从另一个会话或直接在数据库中更改该值,是否仍然可以通过将新值推送到客户端来直接将值更新到任何活动的客户端?

***编辑: 我在TestPage.json.cs文件中添加了以下内容:

    void Handle(Input.Update action)
    {
        Transaction.Commit();
        Session.ForAll(s =>
            {
                if (s.Data is TestPage)
                    s.CalculatePatchAndPushOnWebSocket();
            });
    }

此推送很好地直接更新到其他会话。仍然想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

您在编辑中提供的代码就是您要走的路:

void Handle(Input.Update action)
{
    Transaction.Commit();
    Session.ForAll(s =>
        {
            if (s.Data is TestPage)
                s.CalculatePatchAndPushOnWebSocket();
        });
}

它的作用是:

  • 提交对db的更改
  • 对于每个正在运行的会话,检查该会话是否附加了TestPage个实例
  • 如果以上是肯定的,则重新评估绑定数据并在需要时发送补丁

有关推送WebSocket更改的更多信息,请访问:http://starcounter.io/guides/web/sessions/