【问题标题】:Backbone Events Map not Working骨干事件映射不起作用
【发布时间】:2013-06-28 01:17:21
【问题描述】:

我目前正在尝试编写一个模型,该模型将在获取数据时简单地运行一个函数。就我而言,我正在以正确的方式实施它,但它反复无法按我期望的方式工作。

此时,模型如下所示:

var MyModel = Backbone.Model.extend({
    // fetch the data for this, on return, create modela about it
    url: function() {
        return 'api.example.com/users/' + this.id + '/intialisation';
    },
    events: {
        reset: alert('this works')
    },
    makeItems: function() {
        var newItems, currentInitialiser, currentItem;

        alert('this does not');
    }
});

每当在 this 的实例上调用 fetch() 时,警报框都会按预期弹出“this works”。但是,如果我将事件映射更改为

events: {
    reset: "makeItems"
}

events: {
    reset: this.makeItems
}

该功能未运行(您看不到“这不起作用”警告框)。也许这是由于我对这个事件映射的工作方式有误解,但我很确定我已经看到了类似这样的东西,但我不知道为什么它不起作用。我查看了主干文档,但它们的描述性不是很好,但是,据我了解,我所写的应该可以工作。

希望这不会太难解决

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    通常在主干视图中使用事件哈希,由主干的documentation 支持。对于模型,您需要使用 listenTo 创建一个侦听器。

    var MyModel = Backbone.Model.extend({
        // fetch the data for this, on return, create modela about it
        url: function() {
            return 'api.example.com/users/' + this.id + '/intialisation';
        },
        initialize: function() {
            this.listenTo(this,'reset',this.makeItems);
        },
        makeItems: function() {
            var newItems, currentInitialiser, currentItem;
            alert('this does not');
        }
    });
    

    这应该为您指明正确的方向。

    编辑:另外,根据 Backbone 的文档,模型上的 fetch 不会触发 reset。它触发changehttp://backbonejs.org/#Model-fetch

    【讨论】:

    • 这是一个非常好的问题。当我复制你的代码时它对我不起作用,除非我实际定义了 MyModel。然而,MyModel 的实例不会触发事件。
    • 我觉得我很愚蠢。我将括号留在alert 的末尾,因此实际上调用了该函数,并将结果传递到地图中。
    • 视图事件的处理方式不同有什么好的理由吗?
    • 因为delegateEvents 专门与DOM 事件相关。我想这是防止人们意外创建不仅限于 $el 中的元素的 jQuery 选择器的好方法。它确实使事情变得干净整洁,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多