gpt4 book ai didi

javascript - 如何使用 Backbone Marionette CompositeView 显示嵌套的模型集合?

转载 作者:行者123 更新时间:2023-11-28 11:55:56 24 4
gpt4 key购买 nike

我正在遵循两个教程,在我的 Backbone 应用程序中使用嵌套 CompositeViews ( http://lostechies.com/derickbailey/2012/04/05/composite-views-tree-structures-tables-and-more/http://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/ ),但我无法将其适应我的情况,其中两个模型通过存储一个模型的 id 来关联另一个模型。

我正在尝试获得一个电影列表,每部电影下面都列出相关 Actor 。

这是我目前所拥有的,它显示电影列表,但不渲染任何 Actor 列表:

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
});

MovieApp.mainRegion.show(moviesListView);
}
}
});



/* list_view.js */


PassCake.module("SitesApp.List", function(List, PassCake, Backbone, Marionette, $, _){
List.Actor = Marionette.ItemView.extend({
tagName: "li",
template: "#actor-list-item",

initialize: function(){
console.log("Actor ItemView: " + this.model.get('title'));

}

});

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;

/* The following line throws an error saying TypeError: obj[implementation] is not a function obj[implementation](name, callback, this);
Outputting this.model.actors seems to work but it isn't working when assigned to this.collection.
*/
this.collection = actors;

console.log("Movie view initialized");
}



});

List.Movies = Marionette.CompositeView.extend({
tagName: "div",
template: "#actor-movies-list",
itemView: List.Movie,
itemViewContainer: "#actors-movies"
});

});

我对 Backbone 还很陌生,所以我也很想知道如何使其更干净。感谢您的浏览!

最佳答案

首先,多使用var,你声明了很多全局变量。

我的猜测是,行 this.collection = actor;, actor 不是 Backbone 集合,它可能是一个数组,假设 actors.where({ movieId: movieId }) ; 返回一个数组。

尝试将行更改为 this.collection = new Backbone.Collection(actors)

关于javascript - 如何使用 Backbone Marionette CompositeView 显示嵌套的模型集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23094136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com