Javascript 主干收集事件未触发。我错过什么了吗?
我正试着做一个预载器,在第一步就被抓住了。在使用jquery之前,我已经构建了一个很好的文件夹,还有“raw”js,基本上,我有一个名为img/ui的文件夹和一个服务器端脚本,该脚本只提供该文件夹的JSON转储。此请求是/预加载js,然后将其排队,并根据带有超时和错误处理程序的加载事件进程逐个加载它们。 我想把它移植到主干网。我所认为的模式是一个集合,它加载JSON,为每个资产构建一组模型,然后将一个视图附加到集合以显示队列的状态。。。。。。简单 但是我已经被卡住了。。首先,我必须手动获取JSON,否则它不会做任何事情。。好的完成,第二,即使加载JSON,也不会触发解析方法(或任何其他方法): 我真的开始对主干网感到失望,这是我的第一个主要项目,尽管阅读了所有教程并全面阅读了源代码,但在模式和功能方面似乎存在着太多的矛盾 编辑: 这是万不得已的办法,感觉很肮脏,但以下是我如何“绕过”这个问题的。 我基本上用我自己的like so重写了fetch函数,现在它可以工作了,但是。。。嗯Javascript 主干收集事件未触发。我错过什么了吗?,javascript,model-view-controller,backbone.js,Javascript,Model View Controller,Backbone.js,我正试着做一个预载器,在第一步就被抓住了。在使用jquery之前,我已经构建了一个很好的文件夹,还有“raw”js,基本上,我有一个名为img/ui的文件夹和一个服务器端脚本,该脚本只提供该文件夹的JSON转储。此请求是/预加载js,然后将其排队,并根据带有超时和错误处理程序的加载事件进程逐个加载它们。 我想把它移植到主干网。我所认为的模式是一个集合,它加载JSON,为每个资产构建一组模型,然后将一个视图附加到集合以显示队列的状态。。。。。。简单 但是我已经被卡住了。。首先,我必须手动获取JSO
var PreloaderCollection = Backbone.Collection.extend({
url:"/preload",
events: {
"reset":"parse"
},
initialize: function()
{
log("initing preloader collection")
_.bindAll(this);
this.bind("change",this.parse)
this.fetch(this.url);
},
fetch:function(args){
$.getJSON(
args,
this.parse
)
},
setup: function(args)
{
},
update: function(args)
{
},
parse:function(args){
log("parse",args)
},
remove: function(args)
{
}
});
抓取后要侦听的事件被重置。所以对于肌动蛋白,你必须写:
事件:{
“重置”:“解析”
}
获取的文档可在主干页面上找到:
您使用了错误的事件绑定方式:) 通过事件的散列,可以在视图上声明jquery需要绑定到DOM中元素的所有事件 在模型或集合中,您绑定到重置/更改/错误事件,如下所示:
var myModel = Backbone.Model.extend({});
var myCollection = Backbone.Collection.extend({
model: myModel,
initialize: function() {
this.bind('reset', this.parse, this)
},
parse: function() {
alert('parsing');
}
});
var c = new myCollection({});
c.reset([{name: 'name1'}, {name: 'name2'}]);
请参见此处有关eventbinding的更多信息:
请参阅有关您尝试使用的delegateEvents的更多信息,这些delegateEvents仅用于DOM元素事件绑定的视图中:
有关工作版本,请参见JSFIDLE:
var myModel = Backbone.Model.extend({});
var myCollection = Backbone.Collection.extend({
model: myModel,
initialize: function() {
this.bind('reset', this.parse, this)
},
parse: function() {
alert('parsing');
}
});
var c = new myCollection({});
c.reset([{name: 'name1'}, {name: 'name2'}]);