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

时间:2011-11-28 10:03:48

标签: javascript model-view-controller backbone.js

我正在尝试制作预装载器,并在第一步中遇到主干。我在使用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)
    {

    }
});

2 个答案:

答案 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