我想在我的Backbone.js app
内写下我的第一个CakePHP app
并尝试避免直接在页面中编写我的应用,但是要在js/backbone/app.js
中存储的特定文件中执行此操作我会把Backbone应用程序。
我的第一个测试是通过在页面内编写应用程序来进行一些测试,问题是Model应用程序具有来自php数据的默认值。
以下为不含的示例,包括app.js
:
<html>
<head>
<title>My app test</title>
<script type="text/javascript" src="js/backbone/backbone.min.js"></script>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/underscore.min.js"></script>
<script type="text/javascript">
var Status = {
Models: {},
Collections: {},
Views: {},
Templates:{}
}
Status.Models.Message = Backbone.Model.extend({
defaults:{
icon:"<?php echo $this->App->icon('default-icon-name');?>",
type:"warning",
title:"<?php echo __('Default title'); ?>",
message:"<?php echo __('Default status message text'); ?>"
},
initialize:function () {
console.log("Backbone console message from initialize event");
}
});
// here the rest of the app
</script>
</head>
<body>
here is the app!
</body>
</html>
现在我已将应用移到js/backbone/app.js
内,我不确定如何从app.js
内的页面传递模型的默认参数的最简单方法。
以下是我在<{1}}内添加所有Backbone应用程序的示例:
app.js
我应该将我的应用程序放在$(function(){
$.ajax({
url: "http://site.com/json/default_app"
}).done(function(data) {
var Status = {
Models: {},
Collections: {},
Views: {},
Templates:{}
}
Status.Models.Message = Backbone.Model.extend({
defaults:data,
initialize:function () {
console.log("Backbone console message from initialize event");
}
});
});
})(jQuery);
准备好的文档中吗?我希望不会,这会迫使我在我的jQuery
应用内部创建一个特定的Controller
,以便及时更新。
答案 0 :(得分:0)
所以你基本上有两个选择:
你可以PHP-ify你的JS文件。我不是PHP专家,所以我不能告诉你如何做到这一点的细节,但基本上你可以修改一些设置,告诉PHP处理你的* .js文件。如果你这样做,那么你可以将你想要的任何PHP逻辑粘贴到app.js
(或任何其他JS文件)。
然而,这种方法强烈地将PHP和JS代码结合在一起,这通常被认为是一个坏主意(出于同样的原因,将PHP和HTML严重混合被认为是不好的做法)。因此,我建议......
您可以将PHP部分编写到PHP页面上的变量中,然后在JS文件中引用这些变量。
例如,在您的PHP文件中,您可以这样做:
<script type="text/javascript">
var YOUR_APP = {};
YOUR_APP.MESSAGE = {};
YOUR_APP.MESSAGE.ICON_SRC = "<?php echo $this->App->icon('default-icon-name');?>";
YOUR_APP.MESSAGE.TITLE = "<?php echo __('Default title'); ?>";
</script>
<script type="text/javascript" src="js/app.js"></script>
然后在app.js
中你就可以做到:
Status.Models.Message = Backbone.Model.extend({
defaults: {
icon: YOUR_APP.MESSAGE.ICON_SRC,
title: YOUR_APP.MESSAGE.TITLE,
},
initialize:function () {
console.log("Backbone console message from initialize event");
}
});
由于<script>
标签的排序,您不需要任何onDOMReady包装。