1

私は自分のBackbone.js app中に最初CakePHP appのアプリを書き、ページにアプリを直接書くことを避けようとしていjs/backbone/app.jsますが、Backboneアプリを配置する場所に保存されている特定のファイルに対してそれを行います。

私の最初のテストは、テストを行うためだけにページ内にアプリを作成することによって行われました。問題は、モデルアプリに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

これは、すべての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、アプリ内に特定の機能を作成するCakePHP必要があり、最新の状態に保つのが非常に面倒になります。

4

1 に答える 1

0

したがって、基本的に2つのオプションがあります。

  1. JSファイルをPHP化できます。私はPHPの専門家ではないので、これを行う方法の詳細を説明することはできませんが、基本的に、PHPに*.jsファイルを処理するように指示するために変更できる設定があります。これを行うと、必要なPHPロジックapp.js(または他のJSファイル)を貼り付けることができます。

    ただし、このアプローチはPHPとJSコードを強く結び付けており、これは一般的に悪い考えと見なされます(PHPとHTMLを多用することは悪い習慣と見なされるのと同じ理由で)。したがって、私はお勧めします...

  2. 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ラッピングは必要ありません。

于 2013-03-24T18:57:07.337 に答える