木偶.js复合视图 - 如何在不嵌套的情况下渲染模型和集合
Marionette.js CompositeView - How to render model and collection without nesting
我想寻求一些帮助,因为我已经尝试解决这个问题一段时间了。我读过Derick Bailey关于树结构和CompositeViews的博客文章。我也读过David Sulc的,但我认为用例与那里描述的用例略有不同。注意:我的项目使用木偶.js 1.0.3。
我正在尝试构建一些类似于收件箱的东西,其中电子邮件显示在表格中。电子邮件可能是一个线程,这意味着它将有其他链接到它的电子邮件。收件箱视图呈现在<table>
中,其中每个<tr>
都是一封电子邮件。我的 JSON 看起来像:
[
{id: 1, subject: 'One', threads: []},
{id: 2, subject: 'Two', threads: [
{id: 3, subject: 'Three', threads: []},
{id: 4, subject: 'Four', threads: []}
]},
{id: 5, subject: 'Five', threads: []}
]
我的视图配置如下:
InboxView = Marionette.CompositeView.extend({
// edited for brevity
initialize: function(options) {
this.itemView = EmailView;
}
// edited for brevity
});
EmailView = Marionette.CompositeView.extend({
// edited for brevity
tagName: 'tr',
initialize: function(options) {
this.collection = this.model.get('threads');
},
onRender: function() {
if (this.model.isThread()) this.$el.addClass('thread');
}
// edited for brevity
});
我遇到的问题是,如果我让 CompositeView 通过渲染一次模型然后渲染一次线程集合来为我发挥它的魔力,我最终会在原始电子邮件(父电子邮件)的<tr>
内<tr>
两行表(每个线程一个)。
我尝试重用的InboxView
和EmailView
中存在功能。我试图最终得到的是一个所有行都显示在同一级别的表格。
如果您正在阅读本文并想帮助我,请提前感谢您!
首先,
您应该将视图附加到 DOM。 会发生错误,因为子视图在附加到 DOM 之前呈现。您可以重写某些方法来解决问题。这将解决问题:
EmailView = Marionette.CompositeView.extend({
className: function () {
return this.model.isThread() ? 'thread' : null;
},
initialize: function (options) {
this.collection = new Backbone.Collection(this.model.get('threads'));
},
renderItemView: function(view, index) {
this.$el.parent().append(view.el);
view.render();
}
});
InboxView = Marionette.CompositeView.extend({
itemView: EmailView,
ui: {
$tbody: 'tbody'
},
renderItemView: function (view, index) {
this.ui.$tbody.append(view.el);
view.render();
}
});
JSFiddle: http://jsfiddle.net/d1krtxtr/
相关文章:
- 如何在不使用mvc 4中的模型的情况下进行客户端验证
- 如何在不通过模型验证的情况下屏蔽文本输入中输入的字符
- 输入文本是't在一种情况下以相同的形式更新与另一种情况相同的角度模型
- 在这种情况下,我应该如何在余烬中放置我的模型有很多关系
- Mongoosejs:如何在没有Schema的情况下创建模型
- Angular:如何在没有ng模型的情况下获得输入值
- 默认情况下,一个模型属性等于 sail.js 模型中的另一个模型属性
- 在我的情况下,ng 模型返回未定义
- 如何在不使用映射的情况下更新视图模型
- AngularJS:在不修改ng模型的情况下获取选择标签
- 如何在不破坏角度模型(数组)的情况下对其进行过滤
- 挖空:在不清除视图模型中的值的情况下更改选择列表中的选项
- AngularUI:在应用过滤器的情况下正确更新两个列表之间的模型
- 主干网.js - 在不保存模型的情况下发出 POST 请求
- 木偶.js复合视图 - 如何在不嵌套的情况下渲染模型和集合
- 检测视图模型属性是否在不刷新的情况下发生更改
- 在backbone.js中,如何使用新的模型数据更新视图,同时在没有完整渲染的情况下保持排序顺序
- 默认情况下,如何将ng模型值设置为空字符串
- 如何在不触发模型生命周期回调的情况下更新SailsJS中的记录
- Angular-在不使用$parsers的情况下更新模型