1

例如,我在 Starcounter 中声明了类似的内容

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

我有一个页面列出了数据库中的一行,其中包含一个带有 PuppetJS 的更新按钮,并且一切正常。

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

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

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

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

4

1 回答 1

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/

于 2016-04-25T06:45:24.400 回答