我正在构建一些JS来使用骨干网访问谷歌JS API。到目前为止,我真的坚持使用模型绑定。
我覆盖'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会返回预期结果,但我可以将它们设置为骨干模型。我在“googlePlaceCallback”中需要做些什么吗?我可能还需要覆盖'解析',因为Google的结果并不是很有趣。
答案 0 :(得分:2)
假设结果是您想要的结果的集合,您应该能够按如下方式实现回调:
googlePlaceCallback: function(results, status) {
this.add(results);
}
由于Places是一个主干集合,您只需在上面的代码中调用以下方法:http://backbonejs.org/#Collection-add
您还必须在googlePlaceCallback函数中获取正确的this
引用(您希望this
成为集合)。一种方法是使用Underscores bindAll
方法(http://underscorejs.org/#bindAll),您可以使用它来确保Backbone类中的所有方法都具有Collection本身的this
上下文。您可以在初始化时执行以下操作:
initialize: function() {
_.bindAll(this);
}
另外,没有调用解析的原因是因为你要重写fetch,而fetch调用就是解析。如果您查看带注释的骨干代码,您将能够看到方法调用:http://backbonejs.org/docs/backbone.html