我正在尝试制作预装载器,并在第一步中遇到主干。我在使用jquery之前构建了一个很好的,并且还使用'raw'js基本上发生的事情是我有一个名为img / ui的文件夹和一个服务器端脚本,它只提供该文件夹的JSON转储。该请求是/预加载js然后对此进行排队并基于加载事件的过程逐个加载它们并且超时&错误处理程序。 我正在尝试将其移植到Backbone。我认为模式是一个集合,它为每个资产加载JSON构建一组模型,然后附加到集合的单个视图显示队列的状态......简单。
但是我已经卡住..首先我必须手动获取JSON或者它不会做任何事情......很好..完成,第二,即使加载JSON它也不会解雇parse方法(或任何其他):
var PreloaderCollection = Backbone.Collection.extend({
model:PreloaderModel,
url:"/preload",
events: {
"change":"parse"
},
initialize: function()
{
_.bindAll(this);
this.fetch(this.url);
},
setup: function(args)
{
},
update: function(args)
{
},
parse:function(args){
log(args)
},
remove: function(args)
{
}
});
我真的开始对Backbone感到沮丧,这是我的第一个重大项目,尽管阅读了每个教程并完全通过源代码,但似乎有很多关于模式和功能的矛盾。
修改
这是最后的手段,感觉非常脏,但这就是我如何“绕过”这个问题。 我基本上用我自己的方式覆盖了fetch函数,现在可以工作但是......嗯,
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)
{
}
});
答案 0 :(得分:6)
你使用错误的绑定方式:) 对于事件的哈希,您可以在视图中声明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的更多信息:http://documentcloud.github.com/backbone/#Events-bind
查看有关您尝试使用的delegateEvents的更多信息,但仅用于DOM元素事件绑定的视图中:http://documentcloud.github.com/backbone/#View-delegateEvents
请参阅jsfiddle了解工作版本:http://jsfiddle.net/saelfaer/kt2KJ/1/
答案 1 :(得分:0)
重置获取后要侦听的事件。所以对于肌动蛋白,你必须写:
events: {
"reset":"parse"
}
fetch的文档可以在骨干页面上找到: http://documentcloud.github.com/backbone/#Collection-fetch