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

标签 javascript model-view-controller backbone.js

我正在尝试制作一个预加载器,但在第一步就被主干卡住了。我在使用 jquery 和“原始”js 之前构建了一个很好的,基本上发生的是我有一个名为 img/ui 的文件夹和一个服务器端脚本,它只提供该文件夹的 JSON 转储。这个请求是/preload the js,然后将其排队并根据带有超时和错误处理程序的加载事件过程一个一个地加载它们。 我正在尝试将其移植到 Backbone。我认为的模式是一个加载 JSON 的集合,为每个 Assets 构建一组模型,然后将一个 View 附加到该集合以显示队列的状态......简单。

但我已经卡住了..首先我必须手动获取 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)
    {

    }
});

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

    }
});

最佳答案

您使用错误的方式绑定(bind)到您的事件:) 使用事件的哈希值,您可以在 View 中声明 jquery 需要绑定(bind)到 DOM 中的元素的所有事件。

在您绑定(bind)的模型或集合中重置/更改/错误事件如下:

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'}]);

在此处查看有关事件绑定(bind)的更多信息:http://documentcloud.github.com/backbone/#Events-bind

查看有关您尝试使用的委托(delegate)事件的更多信息,但仅用于 DOM 元素事件绑定(bind)的 View :http://documentcloud.github.com/backbone/#View-delegateEvents

查看 jsfiddle 的工作版本:http://jsfiddle.net/saelfaer/kt2KJ/1/

关于javascript - 主干收集事件未触发。我错过了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294202/

相关文章:

css - 内联 css mvc 问题

javascript - 绑定(bind)在 ng-repeat 内的嵌套元素中不起作用

backbone.js - 如何使用 Backbone.Model.save() promise 进行验证

javascript - 主干模型 save() 方法不执行任何操作

javascript - 粘性导航栏技巧(jquery 已修复)

c - 如何使用 gtk_list_store_set_value?

javascript - 将外部 javascript 脚本添加到 React

jquery - Marionette ItemView 事件 - 将多个函数绑定(bind)到单个事件

javascript - jQuery 在 Chrome 扩展中未定义?

javascript - 将默认文本插入 TinyMCE4 中的 'link' 插件