【发布时间】:2015-09-05 03:45:50
【问题描述】:
我想在集合获取他的模型之后但在模型渲染之前执行一个操作,清除父元素。
我偶然发现了before and after render methods,但它们是特定于模型的,这将导致我的父元素在每次模型渲染之前都被清除。
我当然能够执行预取动作,但我希望它在完成提取和渲染模型之前发生。
我尝试使用监听集合的重置和更改事件,但都导致了不想要的最终结果。 重置事件接缝朝那个方向前进,但传递的参数是整个集合,而不是集合中的单个模型,因此由于参数类型的差异(集合而不是所需的模型),无法使用添加事件回调
任何想法如何在获取集合获取成功但模型尚未渲染时调用回调?
模型包含返回的属性,而集合包含用于获取和解析方法以返回参数包装对象的 url。
下面是我用来渲染集合视图的代码,它基本上是渲染集合中每个模型的视图。
Collection View
---------------
var FoosView = Backbone.View.extend({
el: '#plans',
events: {
//'click tr': 'rowClick'
},
initialize: function() {
this.listenTo(this.collection, 'add', this.renderNew);
_.bindAll(this, "render");
this.render();
},
renderNew: function(FooModel) {
var item = new FooView({model: FooModel});
this.$el.prepend(item.render().$el);
}
...
});
The model view
--------
var FooView = Backbone.View.extend({
tagName: 'li',
initialize: function(options) {
this.options = options || {};
this.tpl = _.template(fooTpl);
},
render: function() {
var data = this.model.toJSON();
this.$el.html(this.tpl(data));
return this;
}
});
提前致谢。
【问题讨论】:
-
嗨,Shahar,像弗朗索瓦一样,我不确定我是否理解您的问题。我认为您要求在集合重新加载/重置时清空父列表?您不能使用 renderNew() 方法,因为来自
reset事件的参数是模型列表而不是单个模型,对吗?所以你想使用this.listenTo(this.collection, 'reset', this.someNewMethod);,其中 someNewMethod 从清除列表开始,然后渲染元素。让我知道这听起来是否正确。 -
我尝试使用 reset 但在渲染传递的参数时遇到问题,因为它是一个集合而不是单个模块(我尝试在 reset 回调中使用 renderNew 方法,我想这是我的错误...
-
是的,看起来重置事件就是你想要的。我会为你提供一个答案,解释如何去做:)。
标签: backbone.js