1

我需要显示three different views哪些与three different model收藏相关。
为了执行此任务,我编写了以下代码。(*)
请告诉我这是否是正确的方法,无论如何它是有效的。

这是我的问题。
在其中一个视图中,假设firstView, 可以对服务器执行 a DELETE request,该服务器注意删除与 this 相关的所有数据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;
});

PS:

_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 应该被删除。

4

2 回答 2

1

为了根据我们的评论对话解决您的问题,Backbone 架构使用事件,所以为什么不使用事件聚合器来发送事件,不要将自己限制在主干构造中。在主干中从一个视图触发事件到另一个视图此模式为您的问题提供了一个优雅的解决方案。

于 2012-05-15T14:41:22.273 回答
1

Views不应该响应直接的方法调用,而是响应事件。说您要么EventAggregator从每个视图创建一个通用的可访问性(正如@20100 在他的回答中解释的那样),或者您通过一个通用模型连接视图并让每个视图监听它自己更有趣的事件。

在您的情况下,您可以从 Views 实例中实例化 Movie 模型并将其周围的三个 View 连接起来:

// 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
  }
});
于 2012-05-15T14:54:59.857 回答