@dlrust的答案是可行的,但不能扩展参数并从代码中的多个位置传递。如果您尝试在渲染模板中执行以下操作:
<script>
define('config', function() {
return {
bootstrappedAccounts: <%= @accounts.to_json %>,
bootstrappedProjects: <%= @projects.to_json(:collaborators => true) %>
};
});
</script>
在另一个文件中添加一些数据。
<script>
define('config', function() {
return {
goods: <%= some data %>,
showcaseList: <%= some json or array %>
};
});
</script>
这里是覆盖操作(不是扩展!!!),在配置中只会保留最后声明的数据。
我的解决方案:使用Backbone模型进行数据的设置/获取。
app.js
define("App", [], function() {
window.App = {
Model: {},
Collection: {},
View: {},
Router: {},
Modal: {},
UI: {}
};
return window.App;
});
global.js
define(["App", "underscore", "backbone"], function(App, _, Backbone) {
"use strict";
App.Model.Global = Backbone.Model.extend({
defaults: {}
});
return new App.Model.Global;
});
index.php
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" data-main="/app/init" src="/app/require/require.js"></script>
</head>
<body>
<div id="tm-inner-wrap">
<div id="loader"><i class="uk-icon-refresh uk-icon-spin"></i></div>
<?= $this->includeTpl('header_view'); ?>
<div>your html content data</div>
<?= $this->includeTpl('footer_view');?>
<script>
require(["global"], function(Global) {
Global.set("notifyList", <?=json_encode($this->notifyList);?>);
});
</script>
</div>
</body>
</html>
另一个模板
someTemplate.php
<div class="tm-inner-body">
<div class="uk-container uk-container-center">
// content data
</div>
</div>
<script>
require(["global", "module/index"], function(Global) {
Global.set("goodList", <?=json_encode($this->goodList);?>);
});
</script>
index.js
require(["App", "core", "jquery", "uikit!uikit-addons-min", "underscore", "backbone", "global", "module/good/goodView"], function(App, Core, $, UIkit, _, Backbone, Global, goodView) {
"use strict";
App.Collection.Good = new Backbone.Collection(Global.get("showcaseList")["items"]);
App.View.GoodList = Backbone.View.extend({
el: ".tm-good-list",
initialize: function() {
this.collection = App.Collection.Good;
this.drawList();
},
drawList: function() {
this.$el.empty();
this.collection.each(function(item, index) {
this.$el.append(this.drawItem(item));
}, this);
},
drawItem: function(data) {
var good = new goodView({model: data});
return good.render().el;
}
});
App.View.Index = Backbone.View.extend({
el: "body",
events: {
},
initialize: function() {
var $this = this;
if(Global.get("showcaseList")) new App.View.GoodList();
}
});
new App.View.Index();
});
文件结构:
![file structure](https://istack.dev59.com/QYy33.webp)