- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Backbone 研究更大规模的数据结构,并遇到过可以通过 CompositeViews 很好地表示数据的场合;也就是说,CollectionViews 在它们周围添加了“添加的绒毛”,例如标题、按钮等。
但是,我在将 CompositeView 相互嵌套时遇到很多困难。使用 CompositeView 上的标准 itemView 属性来呈现另一个 CompositeView 似乎根本不会触发。
假设我有一个 parent ItemView,这样实例化(在 Derick Bailey's example 之后;假设这个顶层是调用集合上的初始 fetch()
的地方):
var User = Backbone.Model.extend({});
var UserCollection = Backbone.Collection.extend({
model: User
});
var userList = new UserCollection(userData);
var schedulerCompositeView = new SchedulerCompositeView({
collection: userList
});
schedulerCompositeView.render();
this.ui.schedulerWidget.html(schedulerCompositeView.el);
SchedulerCompositeView 看起来是这样的:
return Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(schedulerCompositeViewTemplate),
itemView: SchedulerDetailCompositeView,
appendHtml: function (collectionView, itemView) {
collectionView.$("#schedulerGroups").append(itemView.el);
}
});
最后,SchedulerDetailCompositeView:
return Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(schedulerDetailCompositeViewTemplate),
itemView: SchedulerDetailItemView,
appendHtml: function (collectionView, itemView) {
collectionView.$("#schedulerDetailStops").append(itemView.el);
}
});
SchedulerDetailCompositeView 永远不会被实例化;事实上,它的 appendHtml()
方法似乎根本不会触发。
显然这里还缺少一些其他信息;显然,目的是将集合/模型传递给 SchedulerDetailCompositeView,但由于嵌套的 CompositeView,我不太确定这样做的正确技术是什么。
作为引用,这是我要实现的结构的粗略模型;如果有比嵌套 CompositeView 更好的方式来实现这个目标,我当然会洗耳恭听:
最佳答案
Eureka ! deven98602 让我走上了正确的道路。
要记住的关键是,如果您要嵌套多个 CompositeView(或 CollectionView),则向下的每个级联级别将代表其父级集合中的一个单元;也就是说,我之前的 SchedulerDetailCompositeView 表示 SchedulerCompositeView 集合中的单个模型。因此,如果我正在构建嵌套的 CompositeView(可能基于深层嵌套的数据),我必须重新定义这些级联子项的集合,因为它们只有一个与之关联的模型,而不是要呈现的适当集合。
也就是说,更新后的 SchedulerDetailCompositeView 看起来是这样的:
return Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(schedulerDetailCompositeViewTemplate),
itemView: SchedulerDetailItemView,
initialize: function () {
var Load = Backbone.Model.extend();
var LoadCollection = Backbone.Collection.extend({
model: Load
});
// this array of loads, nested within my JSON data, represents
// a new collection to be rendered as models using SchedulerDetailItemView
var loadList = new LoadCollection(this.model.get("loads"));
this.collection = loadList;
},
appendHtml: function (collectionView, itemView) {
collectionView.$("#schedulerDetailStops").append(itemView.el);
}
});
设置集合后,appendHtml()
会按预期触发并呈现这个新设置的集合中的每个新模型。
关于javascript - 如何使用 Backbone.Marionette 处理嵌套的 CompositeView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575101/
问题是,每次我通过每个元素上的集合 (MovieCollection) 的获取函数添加新对象时,都会添加某种事件触发器,并初始化一个新的 MovieList 集合在获取所有项目后传递到的对象。 这是我
我正在开发一个基本的调查应用程序来学习 Marionette/很好地掌握嵌套模型(答案 > 问题 > 调查)。我正在使用 backbone-relational 来完成这个。 在调查 View 中,我
我需要向 listView.template 传递一个值,以便了解有关 collection.length 的模板。 我认为一种选择是重新定义 serializeData 方法以便以这种方式传递参数。
我需要向 listView.template 传递一个值,以便了解有关 collection.length 的模板。 我认为一种选择是重新定义 serializeData 方法以便以这种方式传递参数。
简而言之,这就是我所需要的。 我需要显示一个下拉列表/组合框,其中的子项可以来自许多集合。所有这些集合的模型都有一个文本属性,我将在下拉列表中显示该属性。 我想知道是否可以从许多集合中创建下拉列表。
我希望我的合成自动呈现一个集合,它已经这样做了。不过,我也希望它能为我获取一个模型,并为该模型提供复合访问权限。 基本上,我正在尝试使用下面的一组客户呈现用户详细信息。 复合 View define(
我只需要渲染获取的集合的第一个元素。 ItemView = Backbone.Marionette.ItemView.extend({ template: "#item" }); Items
我正在尝试对 Marionette.CompositeView 中的集合进行排序。 我有一个看起来像这样的集合: [ {id: 1, name: 'bar'}, {id: 2, name:
我想用 Backbone.Marionette 创建一个 View 来呈现模型,然后维护 2 个或更多 CollectionView。基本上是一个具有多个 CollectionView 的 Compo
我想从 Marionette.ItemView 访问 app.vent。 也许可以选择将参数 (app.vent) 从 Marionette.CompositeView 传递到 Marionette.
我们必须显示以下 View : 类别(显示为表格),每个类别表格应该有产品(tr)。 我们如何使用 Marionette itemView 和 CompositeView 构建它? 我们需要产品成为一
我处于以下情况。 当 collection.length = 0 我想将一个参数传递给 listTemplate 以便在 listTemplate 中显示一条消息(没有模型存在!)。我怎样才能实现我的
我有一个具有父子关系的模型,我想在表格显示中显示每个父级,然后是子级,我将在其中稍微缩进子级。我已经快到了,但我似乎只能将子项附加到父行,而不是将它们添加到父行之后。 View.TreeView =
实际上,我想更改现有 Marionette CompositeView 中的整个集合,而不为该 View 创建新对象。 我无法找到用于此目的的方法我已阅读文档 here 最佳答案 您应该能够通过使用集
我不知道为什么这段代码不起作用。 阅读documentation , 应该调用 templateHelpers。 我的目标是将 this.collection.length 传递给模板。 有什么提示吗
我想显示集合中的前 100 个条目,或 101 到 200 之间的条目。 如果我创建一个 Marionette CompositeView 并指定 someRegion.show new MyComp
我现在坚持了。我收到以下错误: TypeError: listenTo is undefined return listenTo.call(this, evtSource, events, _.
我正在尝试设置一个简单的 Marionette 的 CompositeView。这就是我最终想要的: %select#target-id %option{:value => "#{@id}"} =
通过使用 jasmine,我正在尝试测试一个返回 Marionette.CompositeView 的 javascript 模块。 这是 javascript 模块 (2) 和 javascript
我想测试一个模块的行为(使用 Marionette )是否有效 (1)。 奇怪的是,js 模块 (1) 有效,但单元测试 (2) 使用 Jasmine失败。 有什么想法吗? (1) /*global
我是一名优秀的程序员,十分优秀!