我正在构建一些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