javascript - 将 AutobahnJS (WebSockets) 与 Backbone 解耦

标签 javascript backbone.js websocket decoupling autobahn


我有一个具有简单搜索表单的 Backbone 应用程序,当用户在此搜索中写一些东西时,我使用高速公路订阅搜索表单上的给定文本(例如 - 我搜索“foo”,我订阅“foo”)。

如何分离高速公路逻辑?目前在我看来,当用户点击提交时,我会做接下来的事情 -

// On view:

  onUserSearch : function(evt) {
    evt.preventDefault();

    var searchText = this.$el.find("#searchBox").val();
    // searchResultsCollection is an instance of Backbone.Collection
    SearchFeed.subscribe(searchBox, searchResultsCollection)
  }

// SearchFeed subscribe method
  subscribe : function(topic, collection) {
    session.subscribe(topic, function(result) {
      collection.add(result);
    });
  }

在我看来,我会在我的集合中听“添加”并为每个结果创建一个 View 并呈现它。

我认为我的代码结构不合理 -
1.“SearchFeed.subscribe”是否在正确的位置?根据我的观点,我正在执行此代码可以吗?也许它应该在模型上?
2. 集合更改(传递给订阅,SearchFeed 更改它然后听“添加”)管道是否是执行此操作的正确方法?

最佳答案

不确定 Backbone/Autobahn 的理智、解耦结构会是什么样子,但预先考虑这些方面非常重要

FWIW,您可以在此处找到 2 种变体的简单表单示例:

ExtJS 代码正在使用 AutobahnExtJS ,它为 AutobahnJS 提供专门的 ExtJS 数据代理。

基于 Knockout 的代码不需要额外的东西——它也比 ExtJS 变体更长,部分原因是它的功能更丰富。所以你不应该直接比较代码长度。

就我个人而言,我发现 Knockout+Autobahn 方法非常好:你有一个干净的分层:Autobahn 实时代码只与 View 模型交互,而 View 模型是数据绑定(bind)到 View 的。

披露:我是 AutobahnJS 的原作者, AutobahnPython , AutobahnAndroid并为 Tavendo 工作。

关于javascript - 将 AutobahnJS (WebSockets) 与 Backbone 解耦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666603/

相关文章:

javascript - Backbone 路由器不触发路由

model-view-controller - Backbone.js:避免 View →模型→ View 双重转换

java - akka websocket with java,计算客户端数量,向客户端发送消息

javascript - JQuery 可调整大小的触摸屏

Javascript,事件处理程序不能命名为click

javascript - 如何对 SVG 中链接的图像进行去饱和处理?

javascript - JS Facebook API错误: An active access token must be used to query information about the current user

javascript - CSS 选择器相当于backbone.js 中的jQuery.find?

sockets - 使用消息队列扩展WebSockets

firefox - 在 Firefox 或我的代理中禁用 websocket