我有一个具有简单搜索形式的骨干应用程序,当用户在此搜索上写入内容时,我使用高速公路在搜索表单上订阅给定文本(例如 - 我搜索“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更改它然后再听“添加”)管道是正确的方法吗?
答案 0 :(得分:2)
不确定Backbone / Autobahn的理智,解耦结构是什么样的,但是事先考虑这些方面非常重要。
FWIW,您可以在这里找到2个变体的简单表单示例:
ExtJS代码正在使用AutobahnExtJS,它为AutobahnJS提供专门的ExtJS数据代理。
基于Knockout的代码不需要额外的东西 - 它也比ExtJS变体更长,因为它功能更丰富。所以你不应该直接比较代码长度。
就个人而言,我发现Knockout + Autobahn方法相当不错:你有一个干净的分层:Autobahn实时代码只与视图模型交互,视图模型与视图数据绑定。
披露:我是AutobahnJS,AutobahnPython,AutobahnAndroid的原作者,并为Tavendo工作。