2

这是我的问题

我有一个非常简单的骨干集合为我获取一些数据。一切正常,如下所示:

DealershipContacts.Collection = Backbone.Collection.extend({
    url:jarvisUrl ("dealership_contacts"),
    parse:function(response) {
        console.log('parse called');
        return response.data;

    },
    initialize : function(){
        _.bindAll(this, 'reset', 'parse');
    }
});

当调用 fetch 时,按预期将日志解析到控制台。

但在那之后,我想监听重置事件,这样我就可以使用该集合来填充引导输入的源数据。所以我这样做了:

DealershipContacts.Collection = Backbone.Collection.extend({
    url:jarvisUrl ("dealership_contacts"),
    parse:function(response) {
        console.log('parse called');
        console.log(response);
        return response.data;

    },
    reset:function(){
        console.log("change fired");
        $('.dealership_typeahead').typeahead({source:this.pluck('user_name')});
        return true;
    },
    initialize : function(){
        _.bindAll(this, 'reset', 'parse');
    }
});

现在解析事件永远不会被触发并且集合没有填充我不知道为什么。

任何见解都非常感谢,谢谢。

4

1 回答 1

5

您没有reset使用该代码连接到事件。您正在覆盖默认的Backbone.Collectionreset方法(您不想这样做)。

DealershipContacts.Collection = Backbone.Collection.extend({
    url:jarvisUrl ("dealership_contacts"),

    initialize: function(models, options){
        this.on('reset', this.doStuff, this);
    },
    parse:function(response) {
        // you DO want to override the default parse method
        return response.data;
    },
    // don't call this method `reset` :)
    doStuff:function(){
        // do something now that collection is fetched
    }
});

我认为您_.bindAll对监听 Backbone 事件感到困惑。bindAll做了一些不同的事情,你不需要它。

于 2013-03-22T04:21:04.177 回答