4


我有一个具有简单搜索表单的主干应用程序,当用户在此搜索中写一些东西时,我使用高速公路订阅搜索表单上的给定文本(例如 - 我搜索“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 更改它然后收听“添加”)管道是正确的方法吗?

4

1 回答 1

2

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

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

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

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

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

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

于 2013-10-30T07:55:13.143 回答