Backbone.js 我如何利用木偶在一个孩子';s的模型被破坏了?

Backbone.js 我如何利用木偶在一个孩子';s的模型被破坏了?,backbone.js,marionette,Backbone.js,Marionette,我原以为木偶可以自动删除被破坏模型的视图,但在我的情况下它不起作用。我有一个显示电影集的合成视图。每部电影都有演员名单。当我单击“删除电影”时,它应该删除所有相关的演员,并使用已删除的特定电影更新视图。目前,我的应用程序会销毁模型,但视图不会更新。如果我刷新页面,电影和相关演员就会消失,因此我知道它正在破坏模型,而不是点击时的视图。我怎样才能让木偶来处理这件事 相关控制器代码: /* in my list_controller.js */ MovieApp.module("ActorsAp

我原以为木偶可以自动删除被破坏模型的视图,但在我的情况下它不起作用。我有一个显示电影集的合成视图。每部电影都有演员名单。当我单击“删除电影”时,它应该删除所有相关的演员,并使用已删除的特定电影更新视图。目前,我的应用程序会销毁模型,但视图不会更新。如果我刷新页面,电影和相关演员就会消失,因此我知道它正在破坏模型,而不是点击时的视图。我怎样才能让木偶来处理这件事

相关控制器代码:

 /* in my list_controller.js */

 MovieApp.module("ActorsApp.List", function(List, MovieApp, Backbone, Marionette, $, _){
  List.Controller = {

    listActors: function(){
      var actors = MovieApp.request("actor:entities");
      var movies = new Backbone.Collection;
      var allMovies= MovieApp.request("movie:entities");

      actors.each(function(actor) {
        movieId = actor.get("movieId");

        if (!movies.get(movieId) ){

          //console.log("Movie not found. Adding to list list.");
          movie = allMovies.get(movieId);

          selectedActors = actors.where({ movieId: movieId });

          //console.log("Selected Actors: ", selectedActors);
          movie.actors=selectedActors;

          movies.add(allMovies.get(movieId));

        }
        else {
          console.log("Movie found in list. Skipping.")

        }

      });

      var moviesListView = new List.Movies({
        collection: movies
      });

      moviesListView.on("itemview:actor:new", function(childView, model){
        MovieApp.ActorsApp.New.Controller.newActor(model);
      });

      moviesListView.on("itemview:itemview:actor:show", function(childView, model){
        MovieApp.ActorsApp.Show.Controller.showActor(model);
      });

      moviesListView.on("itemview:movie:show", function(childView, model){
        MovieApp.MoviesApp.Show.Controller.showMovie(model);
      });

      moviesListView.on("itemview:movie:delete", function(childView, model){

        childView.children.each(function(child){
          child.model.destroy();
        });

        // This removes a model from the moviesListView collection
        this.collection.remove(childView.model);  

        this.render();

      });

      moviesListView.on("itemview:itemview:actor:delete", function(childView, model){
        model.model.destroy();
      });

      moviesListView.on("movie:list", function(){
        MovieApp.MoviesApp.List.Controller.listMovies();
      });

      MovieApp.mainRegion.show(moviesListView);

    }


  }
});
以下是我的查看代码:

List.Movie = Marionette.CompositeView.extend({
    tagName: "li",
    template: "#actor-movie-list-item",
    itemView: List.Actor,
    initialize: function(){

       console.log("Actors: ", this.model.actors);

        actors = this.model.actors;

        this.collection = actors;

        this.collection = new Backbone.Collection(actors);

    },

    events: {
        "click a.js-remove-movie" : "deleteClicked"
    },

    deleteClicked: function(e){
        e.preventDefault();
        e.stopPropagation();
        this.trigger("movie:delete", this.model);
    },

    appendHtml: function(collectionView, itemView, index){
        var container;

        container = this.$('.recipe-list');
        container.append(itemView.el);
    },


    onRender: function() {
        if(_.isUndefined(this.collection)){
            this.$("ul:first").remove();

        }
        console.log("Movie render called.");
    }

  });

我不完全了解您试图实现的目标,但是,如果您想在销毁模型后更新视图,请尝试以下方法:

recipesListView.on("itemview:movie:delete", function(childView){
    // This removes a model from the recipesListView collection
    this.collection.remove(childView.model);  
});  
这假设您的recipesListView是一个集合,或者是一个compositeView。 同时检查:

我还创建了一个提琴来演示如何使用compositeView并通过事件删除项目:

如果上述方法对您没有帮助,您能解释一下:
-在list.view中,this.model.actors的
是什么?
-视图的结构如何(视图类型的嵌套)

-您的数据在模型和集合中是如何定义的?

谢谢您,Wilbert。这无疑是更新视图的有效方法,但当我重新加载页面时,删除的项目会返回。我把你的台词添加到我拥有的台词中,它现在似乎起作用了,实际上破坏了模型,但我不确定这是否是正确的方法。childView.children.each(函数(child){child.model.destroy();});我已经更新了原始问题以包含我的控制器代码。我还在学习,所以我想我可能没有正确处理好这些关系。演员模型存储一个电影ID以将他们拉入列表。这可以做得更干净,所以我愿意接受建议。为了回答您关于this.model.actors的问题,我正在尝试将关联的演员存储在电影模型中。这似乎不是正确的方法,但现在一切似乎都在运行我只是希望我知道正确的方法。基本上你要做的是定义模型之间的关系。看看这个:谢谢,这就是我要找的!我想我会处理好我需要的一切。我将把这标记为已接受的答案。