主干:在应用级别视图中引用集合
Backbone: Referencing collections in the app level view
考虑下面列出的 Backbone 应用程序。启动时,它会在用户区域中创建餐厅集合和本地餐馆视图。用户稍后可以更改其搜索区域,然后通过提交搜索表单来更新整个集合。
问题:如果集合与视图无关,如何在 search
方法中引用集合?
目前,我正在将餐厅集合和视图设置为App
视图本身的属性,以便可以从方法中轻松引用它,但这似乎是合适的,因为视图不仅与该集合相关。
像我一样引用集合更好,还是最好将其引用为 App.collection
,就像 backbone 在创建具有Backbone.View.extend({collection: mycollection})
的集合时实现的视图时所做的那样?
应用视图:
var App = new (Backbone.View.extend({
...
events: {
submit: "search",
},
start: function(){
App.render();
App.restaurants = new App.Collections.Restaurants();
App.restaurantsView = new App.Views.Restaurants({collection: App.restaurants});
App.restaurants.fetch({});
},
search: function(e){
e.preventDefault();
var payload = $( App.targets.searchForm ).serializeObject();
App.restaurants.fetch({data: payload, processData: true,});
},
...
}):
这些都是大问题:如何构建 Backbone 应用程序,如何定义和维护模块边界,以及如何解耦模块,同时在需要时允许通知,例如在搜索和餐厅之间?
大局答案:看看木偶之类的东西。它是一个建立在 Backbone 之上的框架,它可以轻松遵循许多最佳实践,并为您完成一些繁重的工作。大卫·苏尔克(David Sulc)有一本关于木偶的好书,涵盖了所有这些主题等等。强烈推荐。
直接问题答案:直接引用单个模块(如搜索)之外的对象是一个坏主意。它将应该分开的关切结合在一起。至少,考虑添加应用程序级事件总线:搜索可以触发搜索事件,餐厅代码可以侦听该事件并对其集合执行响应。你可以使用类似 backbone.wreqr 库的 EventAggregator
类,它是为这种事情量身定制的。在紧要关头,您可以使用Backbone.Events
实例来滚动自己的实例:
App.vent = _.extend( {}, Backbone.Events );
从搜索代码触发事件,如下所示:
App.vent.trigger('search', payload);
在start
函数中,注册以侦听该事件:
App.vent.on('search', function(payload) {
App.restaurants.fetch({data: payload, processData: true,});
});
相关文章:
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 全局引用b/t模板和视图
- 如果视图中没有Jquery脚本引用,Unobtrusive Javascript Validation是不起作用的
- 如何在另一个视图中获取元素的引用id-UI5
- 从事件回调中引用包含主干视图
- 在挖空中引用对象构造函数外部视图模型的属性
- 如何在Sencha Architect中将控制器引用到视图
- 主干:丢失对实际视图的引用
- 对 ejs 视图文件的引用在构建后不会更改,尽管它在生产中结合了它.js - Javascript MVC
- 使用模态作为模板视图并引用它
- 木偶.js - 项目视图获取父区域引用
- E/Web 控制台 (8272): 未捕获的引用错误: 在视图寻呼机中加载 Web 视图时未定义函数名称:1
- 为什么在剃刀视图页面中引用JSON编码
- 如何扩展/获取对规则视图就地编辑器的引用
- 主干视图未捕获引用错误
- ExtJS控制器引用视图获胜'不要使用不同的别名
- AngularJS,通过引用更新子控制器视图中的ng repeat
- 以编程方式添加视图,然后引用这些视图
- 使用Aurelia's ref属性引用元素的视图模型
- 当引用对象改变时,react .js视图不更新