使用Backbone将AutobahnJS(WebSockets)解耦

时间:2013-10-29 18:41:47

标签: javascript backbone.js websocket decoupling autobahn


我有一个具有简单搜索形式的骨干应用程序,当用户在此搜索上写入内容时,我使用高速公路在搜索表单上订阅给定文本(例如 - 我搜索“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);
    });
  }

在我看来,我在我的收藏中听“添加”并为每个结果创建一个视图并进行渲染。

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

1 个答案:

答案 0 :(得分:2)

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

FWIW,您可以在这里找到2个变体的简单表单示例:

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

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

就个人而言,我发现Knockout + Autobahn方法相当不错:你有一个干净的分层:Autobahn实时代码只与视图模型交互,视图模型与视图数据绑定。

披露:我是AutobahnJSAutobahnPythonAutobahnAndroid的原作者,并为Tavendo工作。