我正在寻找解决方案,但徒劳无功。
我有一个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。我的方法不起作用......
由于
答案 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并且它有效。
希望这有帮助