如果我覆盖"获取",如何填充主干模型?



我正在构建一些JS使用骨干访问Google Places JS API。到目前为止,我真的坚持使用模型绑定。

i Overrode'fetch'能够使用Google API。对Google的呼吁正常工作。

var Places = Backbone.Collection.extend({
    model: Place,
    fetch: function(options) {
        // SNIPPET //
        service = new google.maps.places.PlacesService(map);
        service.nearbySearch(request, this.googlePlaceCallback);
        // SNIPPET //
    },
    parse: function(response){
        // nerver  called
    },
    googlePlaceCallback: function(results, status) {
        // I do something here and is properly called after Google returns a response
    }
});

我还定义了一个非常简单的视图:

var MapView = Backbone.View.extend({
    initialize: function() {
        this.model = new Places();
        this.model.bind("reset", this.render, this);
        this.model.fetch();
    },
    render : function () {
        console.log( this.model.toJSON() );
    }
});

我不知道如何填充"模型"。Google返回预期的结果,但我可以将它们设置为骨干模型。我在" Google PlaceCallback"中需要做些什么?由于Google的结果并不完全有趣,我可能还需要覆盖"解析"。

假设结果是您想要的结果的集合,您应该能够按以下方式实现回调:

googlePlaceCallback: function(results, status) {
    this.add(results);
}

由于位置是一个骨干集合,您只是在上述代码中调用以下方法:http://backbonejs.org/#collection-add

您还必须在Google PlaceCallback函数中获得正确的this参考(您希望this成为集合)。一种方法是使用下划线bindAll方法(http://underscorejs.org/#bindall),您可以使用它们来确保骨干类中的所有方法具有集合本身的this上下文。您可以在初始化时进行此操作:

initialize: function() {
    _.bindAll(this);
}

另外,没有称呼解析的原因是因为您正在覆盖fetter,而获取呼叫解析。如果您查看注释的骨干代码,您将能够查看方法调用:http://backbonejs.org/docs/backbone.html

最新更新