使用Require.js设置Symfony2和Backbone.js

时间:2014-04-14 16:43:36

标签: javascript symfony backbone.js requirejs

我有一个非常简单的应用程序,类似于Todo,有一个名为Subject的实体。

Symfony2将服务于REST api,Backbone应用程序将负责客户端发生的事情。 我一直在尝试设置我的项目,以便Require.js加载基本模型和一组非常简单的视图,但我总是得到这个错误:

"NetworkError: 404 Not Found - http://localhost:8000/bundles/pfiuser/js/app/.js"

接着是

Error: Script error for: http://requirejs.org/docs/errors.html#scripterror
In require.js line 166

最后是超时:

Error: Load timeout for modules: http://requirejs.org/docs/errors.html#timeout

我不太了解Require.js,但我认为它来自我所做的defines其中一项并不起作用。这是需要的配置(我的工作基于this tutorial):

requirejs.config({
    baseUrl: '{{ asset('bundles/pfiuser/js/app/')  }}',
    paths: {
        text: "vendor/requirejs-text/text",
        jquery: 'vendor/jquery/dist/jquery',
        underscore: 'vendor/underscore/underscore',
        backbone: 'vendor/backbone/backbone',
        bootstrap: 'vendor/bootstrap/dist/js/bootstrap',
        bootstrapEditable: 'vendor/bs3-editable/bootstrap-editable'
    },
    shim: {
        underscore: {
            exports: '_'
    },
    backbone: {
         deps: ['underscore', 'jquery'],
             exports: 'Backbone'
         },
         bootstrap: {
             deps: ['jquery'],
             exports: 'Bootstrap'
         }
    }
});

然后我打电话给应用程序:

require([
    '{{ asset('bundles/pfiuser/js/app/app.js')  }}'
], function(App){
    App.initialize();
});

在app.js中,它变得奇怪了。这是基本文件:

define([
    'jquery',
    'underscore',
    'backbone',
    'router'
], function($, _, Backbone, Router){
    var initialize = function(){
        //Router.initialize();
    }

    return {
        initialize: initialize
    };
});

我得到了错误。如果我只评论路由器(调用其他文件),我仍然有错误。但如果我评论骨干电话,我就不会再出现错误了:

定义([     ' jquery的&#39 ;,     '下划线' / ,     '主链&#39 ;,     '路由器' / ],function($,_,Backbone,Router){     var initialize = function(){         //Router.initialize();     }

return {
    initialize: initialize
};

});

这个错误对我来说听起来很神秘,所以我不知道如何解决它。这是我的项目目录结构,供参考:

//In src/PFI/UserBundle/Resources/public/js/
app/
|-- collections
|      |-- subjects.js
|-- models
|      |-- subject.js
|-- templates
|      |-- subjects
|      |     |-- list.html
|-- vendor
|     //all the libraries installed via bower
|-- views
|      |-- subjects
|             |-- list.js
|-- app.js
|-- boilerplate.js
|-- main.js //(unused as I configure requirejs directly in the page layout)
|-- router.js

1 个答案:

答案 0 :(得分:1)

我也在尝试使用Symfony2的require,但我认为你不应该这样做:

    require([
    '{{ asset('bundles/pfiuser/js/app/app.js')  }}'
], function(App){
    App.initialize();
});

更像是

require([
    'app'
], function(App){
    App.initialize();
});

实际上你的基本网址已经指定了我认为的路径,而且,最后你不应该有.js。 (我看到了一些关于twig filter | raw | escape' .js')

的例子