使用Require.js使Backbone.js模块化

时间:2013-04-12 13:09:55

标签: javascript backbone.js requirejs

我试图通过Backbone.js使我的Backbone.js组件,模型和视图模块化。但是每当我尝试require()时,它都会返回:

function (){return i.apply(this,arguments)} 

而不是我需要的Backbone魔法。

我已经设置了我的Require.js:

// Configure require.js
require.config(
    {
        paths: {
            "data": "config"
        ,   "jquery": "libs/jquery.min"
        ,   "underscore": "libs/underscore-min"
        ,   "backbone": "libs/backbone-min"
        ,   "events": "collections/events"
        ,   "eventModel": "models/eventModel"
        ,   "eventView": "views/eventView"
        }
    ,   shim: {
            underscore: {
                exports: '_'
            }
        ,   jquery: {
                exports: '$'
            }
        ,   backbone: {
                deps: ["underscore"]
            ,   exports: "Backbone"
            }
        }
    }
);

// Initiate app
require(
    [
        "data"
    ,   "jquery"
    ,   "underscore"
    ,   "backbone"
    ,   "events"
    ,   "eventModel"
    ,   "eventView"
    ], function(data, $, _, Backbone, Events, EventModel, EventView) {
        console.log(Events);
        _.each(["data/general.xml"], function(URI) {
            var general = new Events({url: URI});
        });
    }
);

这是我的集合/ events.js:

define(
    [
        "backbone"
    ,   "eventModel"
    ]
,   function(Backbone, EventModel) {
        "use strict";
        var Events = Backbone.Collection.extend({
            model: EventModel

        ,   parse: function(data) {
                var parsed = [];
                $(data).find('Event').each(function(index) {
                    parsed.push({
                        title: $(this).find('title').text(),
                        date: $(this).find('date').text(),
                        content: $(this).find('content').text()
                    });
                });
                return parsed;
            }

        ,   fetch: function(options) {
                options = options || {};
                options.dataType = "xml";
                Backbone.Collection.prototype.fetch.call(this, options);
            }
        });

        return Events;
    }
);

我希望返回Events集合,但显然不是。谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:1)

一切似乎都很好。你看到了什么:

function (){return i.apply(this,arguments)} 

是您班级的构造函数。不要理会它。相反,请尝试记录new myClass

修改
您没有看到任何方法,因为它们存储在您的类的原型中。调用的 i 函数是“真正的”构造函数(名为 i ,因为它已被缩小)。