我如何使用来自 symfony 的数据初始化我的单页 backbone 应用程序

How can i init my single page backbone app with data from symfony

我正在寻找解决方案,但没有成功。

我有一个 Symfony2 站点,一个页面加载一个 backbone 应用程序,如下所示:

{% extends "AcmeCardBundle::layout.html.twig" %}


{% block content %}
    <div id="main_container"></div>
{% endblock %}

{% block javascripts %}

    <script>
       var idfoo = "foo";
    </script>

    {% javascripts
    '@AcmeCardBundle/Resources/public/js/vendors/require.js'
    '@AcmeCardBundle/Resources/public/js/boot.js'%}
    <script type="text/javascript" src="{{ asset_url }}" data-main="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endblock %}

{% block stylesheets %}
    {% stylesheets 'bundles/acmecard/css/screen.css' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

此代码使用 Requirejs

加载我的 boot.js
    requirejs.config({
        baseUrl: 'http://localhost/symfony2/web/bundles/acmecard/js',
        paths: {
            jquery: 'vendors/jquery',
            underscore: 'vendors/underscore',
            backbone : 'vendors/backbone'
        }
    });

    // Start the main app logic.
    requirejs(['jquery','underscore','backbone', 'app/app','app/router' ],
        function   ( $,  _  ,  Backbone, app ) {

            $(document).ready(function () {

                console.log(window.idfoo);

                app.initialize();
            });
        }
);

我的问题可能很愚蠢,但我不明白如何从 Backbone 中的 Symfony2 访问 var window.idfoo 。我的方法不行...

谢谢

一点也不傻。虽然我无法帮助您处理 backbone 本身,但我在处理 AngularJS 时遇到了类似的问题。尽管如此,分辨率基本上是一样的。

我是这样解决的:

<script>
    window['myBackboneApp'] = {
        var1: 'foo',
        var2: 'bar'
    }
</script>

然后在您的 boot.js 中直接引用 window['myBackboneApp']

我不确定这是否是处理此问题的正确方法。例如,直到最近,我发现 Angular 中有一种方法可以将属性传递给控制器​​。也许 backbone.js 也有类似的东西?

我找到了解决问题的方法

在我的 twig Symfony 中,我像这样放置 require init

{% block javascripts %}
    {% javascripts
    '@AcmeCardBundle/Resources/public/js/vendors/require.js'%}
    <script type="text/javascript" src="{{ asset_url }}" data-main="{{ asset_url }}"></script>
    {% endjavascripts %}

    <script type="text/javascript" >
        requirejs.config({
            baseUrl: 'http://localhost/symfony2/web/bundles/acmecard/js',
            paths: {
                jquery: 'vendors/jquery',
                underscore: 'vendors/underscore',
                backbone : 'vendors/backbone'
            },
            config: {
                'app/app': {
                    user: '{{ app.user.username }}'
                }
            }
        });

        // Start the main app logic.
        requirejs(['jquery','underscore','backbone', 'app/app','app/router' ],
                function   ( $,  _  ,  Backbone, app ) {

                    $(document).ready(function () {
                        app.initialize();
                    });
                }
        );

    </script>

{% endblock %}

如您所见,有一个配置参数,您可以在其中为模块定义一些变量(此处 app/app)。在这个例子中我定义了一个用户。

然后在app/app.js

define(function (require, exports, module) {

    var initialize = function() {
        console.log(module.config().user);
        Backbone.history.start();
    };

    return {
        initialize: initialize
    };

});

我们必须添加一些参数,它起作用了。

希望对您有所帮助