骨干收集事件没有解雇.我错过了什么吗?

Ale*_*lex 2 javascript model-view-controller backbone.js

我正在尝试制作一个预加载器并在第一步中遇到主干.我在使用jquery之前构建了一个很好的,并且还使用'raw'js基本上发生的事情是我有一个名为img/ui的文件夹和一个服务器端脚本,它只提供该文件夹的JSON转储.此请求是/ preload js然后对此进行排队并根据具有超时和错误处理程序的加载事件的过程逐个加载它们.我正在尝试将其移植到Backbone.我认为模式是一个集合,它为每个资产加载JSON构建一组模型,然后附加到集合的单个视图显示队列的状态......简单.

但我已经卡住..首先我必须手动获取JSON或它不会做任何事情..很好..完成,第二,即使加载JSON它不会解雇解析方法(或任何其他):

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)
    {

    }
});
Run Code Online (Sandbox Code Playgroud)

我真的开始对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)
    {

    }
});
Run Code Online (Sandbox Code Playgroud)

San*_*der 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'}]);
Run Code Online (Sandbox Code Playgroud)

在这里查看关于eventbinding的更多信息:http://documentcloud.github.com/backbone/#Events-bind

查看有关您尝试使用的delegateEvents的更多信息,但仅用于在DOM元素事件绑定的视图中使用:http://documentcloud.github.com/backbone/#View-delegateEvents

看到j​​sfiddle的工作版本:http://jsfiddle.net/saelfaer/kt2KJ/1/