Backbone fetch无法正常工作

时间:2014-03-19 00:03:29

标签: javascript jquery ajax backbone.js marionette

以下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);
                }
            });
        });

我不知道在哪里调试这个。 “网络”选项卡告诉我数据已被提取,但永远不会调用成功方法。

由于

1 个答案:

答案 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代码无关(您只记录一个静态字符串),但只要您尝试使用该参数,它就会相关。 :-)