我需要显示与three different views
或集合相关的three different model
为了执行此任务,我编写了以下代码。 (*)
请告诉我这是否是正确的方法,无论如何它都有效。
这是我的问题。
在其中一个视图中,假设firstView
可以对服务器执行DELETE request
,该服务器会删除与此three view
相关的所有数据。
现在我需要删除我的三个视图......
但是从firstView
我无法访问其他两个观点。
1)我该如何执行此任务?
2)我应该重新设计/改进我的实施吗?
(*)
// module for display three different views
define([
"js/views/01View",
"js/views/02View",
"js/views/03View"
], function (FirstView, SecondView, ThirdView) {
var MainView = Backbone.View.extend({
initialize: function ()
{
this.render();
},
render: function ()
{
var movie_id = this.options.movie_id;
this.firstView = new FirstView(movie_id);
this.secondView = new SecondView(movie_id);
this.thirdView = new ThirdView(movie_id);
}
});
return MainView;
});
P.S:
_id用于构建集合或模型的url参数
url1: http://localhost/movie/movie_id (model1)
url2: http://localhost/movie/movie_id/followers (collection2)
ulrs: http://localhost/movie/movie_id/feeds (collection3)
当我删除model1时,应删除与collection2和collection3相关的view2和view3。
答案 0 :(得分:1)
为了根据我们的评论对话来适应您的问题,Backbone架构使用事件进行循环,因此为什么不使用事件聚合器来发送事件,不要将自己局限于骨干构造。 fire an event from one view to another in backbone此模式为您的问题提供了一个优雅的解决方案。
答案 1 :(得分:1)
Views
不应该响应直接方法调用,而应该响应事件。说你要么从每个视图创建一个公共EventAggregator
可访问(正如@ 20100在他的回答中解释的那样),要么通过通用模型连接视图,并将每个视图设为听到它自己的更多有趣的事件。
在您的情况下,您可以从Views实例化中实例化Movie模型并连接它周围的三个视图:
// code simplified and not tested
var MainView = Backbone.View.extend({
initialize: function ( opts ) {
this.movie = new Movie({ id: this.opts.movie_id} )
this.movie.fetch();
this.render();
},
render: function () {
this.firstView = new FirstView( this.movie );
this.secondView = new SecondView( this.movie );
this.thirdView = new ThirdView( this.movie );
}
});
var ThirdView = Backbone.View.extend({
initialize: function( opts ) {
this.movie = opts.movie;
this.movie.on( "destroy", this.cleanUp, this )
this.followers = // fetch the followers as you do now, use this.model.id
}
cleanUp: function(){
// your clean up code when model is detroyed
}
});