如何使用来自symfony

时间:2015-05-18 10:27:41

标签: javascript symfony backbone.js

我正在寻找解决方案,但徒劳无功。

我有一个Symfony2站点,一个页面加载这样的骨干应用程序:

{% 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。我的方法不起作用......

由于

2 个答案:

答案 0 :(得分:0)

根本不傻。虽然我无法帮助backbone本身,但我遇到了与AngularJS类似的问题。不过,决议基本上是一样的。

这就是我设法解决它的方法:

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

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

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

答案 1 :(得分:0)

我找到了解决问题的方法

在我的枝条Symfony中,我把这样的需要初始化

{% 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 %}

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

然后在app / app.js

define(function (require, exports, module) {

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

    return {
        initialize: initialize
    };

});

我们必须添加一些args并且它有效。

希望这有帮助