【问题标题】:Scala Lift - Comet actor initialization messageScala Lift - Comet actor 初始化消息
【发布时间】:2011-11-01 16:12:39
【问题描述】:

我有以下彗星演员:

class ChatComet extends CometActor with CometListener {

    private var messages: List[ChatItem] = Nil 

    def registerWith = ChatServer

    override def lowPriority = {

        case v: List[ChatItem] => 

        messages = v; 
        reRender()

    }

    def render = {

        "li *" #> messages.map(message =>

            ".name *" #> message.name &
            ".text *" #> message.value

    )

}

它将消息分发到各个房间,我没有一种方法来限制哪些消息在哪里结束,所以来自 RoomA 的消息最终在 RoomA 中而不是在 RoomB 中。

我听说您可以使用某种消息来初始化彗星演员,在我的情况下可以用作房间 ID。

这是正确的做事方式吗?如果是这样,我将如何去做?

提前感谢您的帮助,非常感谢:)

【问题讨论】:

    标签: scala comet lift


    【解决方案1】:

    在模板中,命名彗星演员,如下所示:

     <div class="l:comet?type=CometActor;name=roomA"> stuff </div>
    

    在您的 CometActor 中,然后匹配名称,如下所示:

        def lowpriority = {
           case NewComment(room, msg) => {
          name.map(x => x match {
            case "roomA" => {
              stuff
            }
        }
      }
    

    现在,您可能没有像“roomA”这样的明确名称,但您可以保留一个房间名称列表,然后简单地匹配它们。

    【讨论】:

    • 您好,感谢您的帮助,我的目标是拥有很多动态生成的房间(数百个),有没有办法可以动态添加这个参数?
    • 是的,使用 sn-p 生成彗星演员。
    【解决方案2】:

    为您的 Comet Actor 提供与聊天室相关联的名称。然后将为每个房间构建一个新的 Actor。您不需要对 Actor 本身进行任何特殊处理;除非你想根据房间有特殊的功能。

    您可以看到 a nice example 引用了 on the Lift wiki,它显示了如何使用 sn-p 将名称分配给您的 Comet Actor。

    【讨论】:

      【解决方案3】:

      对于一般初始化 CometActor,请查看 CometActor 中 S.param 上的 my answer。话虽如此,Dave 和 Tyler 的回答似乎更适合您想做的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 2018-08-31
        • 1970-01-01
        • 2020-06-29
        • 2023-03-22
        相关资源
        最近更新 更多