Backbone.js事件未启动
Backbone.js event not fired
我有以下backbone.js代码,用于呈现后端提供的产品列表。问题是AppView
的render
方法永远不会被调用,也就是说,当fetch
调用完成时,通过this.listenTo(product_list, 'change', this.render);
连接的侦听器不会被激发。
有人能告诉我怎么了吗?
$(function(){
Product = Backbone.Model.extend({
url: '/api/product',
defaults: {
name: 'default name'
}
});
// Collection
ProductList = Backbone.Collection.extend({
url: '/api/products',
model: Product,
});
product_list = new ProductList();
// Views
ProductListView = Backbone.View.extend({
tagName: 'div',
initialize: function(){
this.listenTo(this.model, 'change', this.render);
},
render: function(){
console.log('p:render');
this.$el.html('<input type="checkbox" value="1" name="' + this.model.get('title') + '" /> ' + this.model.get('title') + '<span>$' + this.model.get('price') + '</span>');
this.$('input').prop('checked', this.model.get('checked'));
return this;
}
});
AppView = Backbone.View.extend({
el: '#list',
initialize: function(){
this.list = $('#list');
this.listenTo(product_list, 'change', this.render);
product_list.fetch({reset:true});
console.log('fetch');
},
render: function(r) {
console.log('AppView.render');
product_list.each(function(product){
console.log('p:e:render()');
var view = new ProductListView({ model: product });
this.list.append(view.render().el);
});
return this;
}
});
new AppView();
});
我也遇到了同样的问题,通过查看源代码,我发现集合在获取时不会触发change
事件。change
事件仅在已更新的模型上激发。由于使用的是reset:true
,请尝试侦听reset
事件。
相关文章:
- 从控制器返回后Ajax启动事件激发
- 触摸启动事件未在iframe iOS 6中启动
- preventDefault之后的重新启动事件
- 如何获取在一系列事件中启动事件的元素
- 当窗口打开时,IE9在加载前启动事件
- 我的 JS 代码中的会话启动事件
- 仅当前一个事件完全完成时,才启动事件
- jQuery UI - 如何区分拖动/调整大小启动事件和单击事件
- Javascript “卡住”键(未注册的键启动事件)
- pace.js:“启动”事件未触发
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 如何将“拖动启动”事件与 CKEditor 实例分离
- 触摸启动事件上的Javascript触发函数
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 触摸启动事件未在原来隐藏的按钮上工作
- 有没有一种方法可以使触摸启动事件不会触发点击事件
- 检测浏览器窗口是否处于活动状态,并在窗口再次处于活动状态后启动事件[JavaScript]
- 如何检测浏览器是否支持手势启动事件
- 首先启动事件,然后转到url
- 在IE7中无法捕获鼠标启动事件