如何在外部file.js中将参数从PHP发送到Backbone

时间:2013-03-24 18:25:35

标签: jquery backbone.js default-value

我想在我的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,以便及时更新。

1 个答案:

答案 0 :(得分:0)

所以你基本上有两个选择:

  1. 你可以PHP-ify你的JS文件。我不是PHP专家,所以我不能告诉你如何做到这一点的细节,但基本上你可以修改一些设置,告诉PHP处理你的* .js文件。如果你这样做,那么你可以将你想要的任何PHP逻辑粘贴到app.js(或任何其他JS文件)。

    然而,这种方法强烈地将PHP和JS代码结合在一起,这通常被认为是一个坏主意(出于同样的原因,将PHP和HTML严重混合被认为是不好的做法)。因此,我建议......

  2. 您可以将PHP部分编写到PHP页面上的变量中,然后在JS文件中引用这些变量。

  3. 例如,在您的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包装。