以下Backbone / Marionette Controller和Collection将无法获取。
define(["jquery", "backbone","models/Poi"],
function($, Backbone, Poi) {
// Creates a new Backbone Poi class object
var PoiCollection = Backbone.Collection.extend({
model:Poi,
parse: function (response) {
console.log(response);
// Return people object which is the array from response
return response;
}
});
// Returns the Poi class
return PoiCollection;
}
);
define(['App', 'backbone', 'marionette', 'views/MapView', 'views/DesktopHeaderView', 'views/DesktopFooterView', 'models/Poi'],
function (App, Backbone, Marionette, MapView, DesktopHeaderView, DesktopFooterView, Poi) {
return Backbone.Marionette.Controller.extend({
initialize: function (options) {
App.headerRegion.show(new DesktopHeaderView());
App.mainRegion.show(new MapView());
App.footerRegion.show(new DesktopFooterView());
},
//gets mapped to in AppRouter's appRoutes
index: function () {
console.log("Ajax::list of POI");
var p = new Poi();
p.fetch({
success: function (data) {
console.log("data");
}
});
console.log(p);
}
});
});
我不知道在哪里调试这个。 “网络”选项卡告诉我数据已被提取,但永远不会调用成功方法。
由于
答案 0 :(得分:1)
我认为您的fetch
调用本身看起来不错,但另外两个明显的错误可能会影响该调用:
1)index
函数中的日志消息显示Poi的“列表”,但您使用的是(单个)Poi
实例 - 应该是PoiCollection
而是?我假设Poi
模型(上面没有显示)是针对单个项目的。
2)url
中没有PoiCollection
属性,因此如果您fetch
改为PoiCollection
,则该调用将失败,因为PoiCollection
没有知道要使用的URL。 Collection +相关模型最常见的模式是仅在集合中放置url
,而在集合的各个项目的单个模型中不放置url
(在这种情况下为Poi
)。 Backbone将根据父集合url
根据需要构建相应的单个模型URL。我认为让url
理顺起来会有所帮助。
最后,还有一件事:传递给fetch
调用的success
函数的第一个参数是Model或Collection实例本身,而不是原始数据对象。这与您现在拥有的当前success
代码无关(您只记录一个静态字符串),但只要您尝试使用该参数,它就会相关。 :-)