2013-10-29 29 views
4


我有一个拥有简单搜索形式的骨干应用程序,当用户在此搜索上写入内容时,我使用autobahn来订阅搜索表单上的给定文本(例如 - 我搜索“foo”,我订阅“foo”)。Decouple AutobahnJS(WebSockets)with Backbone

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

// 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改变它,然后收听“添加”)管道是正确的方式来做到这一点?

回答

2

不确定Backbone/Autobahn的结构是否合理,解耦结构是什么样子,但考虑到这些方面是非常重要的。

FWIW,你可以找到一个简单的形式,例如在2变种这里:

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

基于Knockout的代码不需要额外的东西 - 它也比ExtJS变体更长,部分原因是它功能更丰富。所以你不应该直接比较代码长度。个人而言,我发现Knockout + Autobahn方法相当不错:您有一个干净的分层:Autobahn实时代码只与视图模型交互,并且视图模型与数据绑定到视图。

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