Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干收集事件未触发。我错过什么了吗?_Javascript_Model View Controller_Backbone.js - Fatal编程技术网

Javascript 主干收集事件未触发。我错过什么了吗?

Javascript 主干收集事件未触发。我错过什么了吗?,javascript,model-view-controller,backbone.js,Javascript,Model View Controller,Backbone.js,我正试着做一个预载器,在第一步就被抓住了。在使用jquery之前,我已经构建了一个很好的文件夹,还有“raw”js,基本上,我有一个名为img/ui的文件夹和一个服务器端脚本,该脚本只提供该文件夹的JSON转储。此请求是/预加载js,然后将其排队,并根据带有超时和错误处理程序的加载事件进程逐个加载它们。 我想把它移植到主干网。我所认为的模式是一个集合,它加载JSON,为每个资产构建一组模型,然后将一个视图附加到集合以显示队列的状态。。。。。。简单 但是我已经被卡住了。。首先,我必须手动获取JSO

我正试着做一个预载器,在第一步就被抓住了。在使用jquery之前,我已经构建了一个很好的文件夹,还有“raw”js,基本上,我有一个名为img/ui的文件夹和一个服务器端脚本,该脚本只提供该文件夹的JSON转储。此请求是/预加载js,然后将其排队,并根据带有超时和错误处理程序的加载事件进程逐个加载它们。 我想把它移植到主干网。我所认为的模式是一个集合,它加载JSON,为每个资产构建一组模型,然后将一个视图附加到集合以显示队列的状态。。。。。。简单

但是我已经被卡住了。。首先,我必须手动获取JSON,否则它不会做任何事情。。好的完成,第二,即使加载JSON,也不会触发解析方法(或任何其他方法):

我真的开始对主干网感到失望,这是我的第一个主要项目,尽管阅读了所有教程并全面阅读了源代码,但在模式和功能方面似乎存在着太多的矛盾

编辑:

这是万不得已的办法,感觉很肮脏,但以下是我如何“绕过”这个问题的。 我基本上用我自己的like so重写了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)
    {

    }
});

抓取后要侦听的事件被重置。所以对于肌动蛋白,你必须写:
事件:{
“重置”:“解析”
}

获取的文档可在主干页面上找到:
您使用了错误的事件绑定方式:) 通过事件的散列,可以在视图上声明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'}]);