Javascript 主干事件映射不工作

Javascript 主干事件映射不工作,javascript,events,model-view-controller,backbone.js,Javascript,Events,Model View Controller,Backbone.js,我目前正在尝试编写一个模型,只要在获取数据时运行一个函数即可。就我而言,我正在以正确的方式实施它,但它一再未能按照我预期的方式发挥作用 此时,模型如下所示: var MyModel = Backbone.Model.extend({ // fetch the data for this, on return, create modela about it url: function() { return 'api.example.com/users/' + thi

我目前正在尝试编写一个模型,只要在获取数据时运行一个函数即可。就我而言,我正在以正确的方式实施它,但它一再未能按照我预期的方式发挥作用

此时,模型如下所示:

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');
    }
});
每当对此实例调用
fetch()
时,警报框会按预期弹出“this works”。但是,如果我将事件映射更改为

events: {
    reset: "makeItems"
}

该函数未运行(您没有看到“此操作不起作用”警报框)。也许这是因为我对这张事件地图的工作方式有误解,但我很确定我看到过这样的东西,但我不明白为什么它不起作用。我已经看过了主干文档,但它们不是很具有描述性,然而,据我所知,我所写的应该是有效的

希望这不会太棘手而难以解决


非常感谢。

通常,事件哈希在主干视图中使用,由主干的。对于模型,您需要使用
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');
    }
});
这将为您指明正确的方向


编辑:另外,根据主干网的文档,模型上的
fetch
不会触发
reset
。它会触发
更改

通常,事件哈希在主干视图中使用,由主干视图支持。对于模型,您需要使用
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');
    }
});
这将为您指明正确的方向


编辑:另外,根据主干网的文档,模型上的
fetch
不会触发
reset
。它会触发
更改

这是一个很好的问题。当我复制您的代码时,它对我不起作用,除了当我实际定义MyModel时。然而,MyModel的实例不会引发这一事件。我认为我太愚蠢了。我在
警报
的末尾留下了括号,因此实际上调用了该函数,并将结果传递到了映射中。是否有充分的理由说明视图事件的处理方式有所不同?因为delegateEvents与DOM事件特别相关。我想这是一种很好的方法,可以防止人们意外地创建jQuery选择器,而这些选择器并不局限于$el中的元素。这肯定会让事情变得干净漂亮,不是吗?这是个很好的问题。当我复制您的代码时,它对我不起作用,除了当我实际定义MyModel时。然而,MyModel的实例不会引发这一事件。我认为我太愚蠢了。我在
警报
的末尾留下了括号,因此实际上调用了该函数,并将结果传递到了映射中。是否有充分的理由说明视图事件的处理方式有所不同?因为delegateEvents与DOM事件特别相关。我想这是一种很好的方法,可以防止人们意外地创建jQuery选择器,而这些选择器并不局限于$el中的元素。它确实让事情变得干净漂亮,不是吗?