9

レンダリングされたページ内でブートストラップされた変数 (つまり、JSON データまたは構成変数) を渡してrequire.js、依存関係によって使用されているかどうかを確認できるようにするためのベスト プラクティスは何ですか?

これは、オブジェクトをチェックすることで実行できるように見えwindowます (つまりwindow.bootstrapped_models、それはあまり最適ではないようです。

app.html- HTML ドキュメント内のサンプル データ

<script>
var config = {
    "isAdmin": true,
    "userId": 1
};
var bootstrapped_models = {
    "groups": [
        {
            "id": 1,
            "name": "Foo"
        },
        {
            "id": 2,
            "name": "Bar"
        }
    ]
}
</script>

app.js- require() を使用したサンプルアプリ

require(['jquery', 'GroupCollection'], function($, GroupCollection) {

    // extend default config
    if (config) {
        $.extend(defaults, config);
    }

    // use bootstrapped JSON here
    var collection = new GroupCollection;
    if (bootstrapped_models.groups.length > 0) {
        collection.add(bootstrapped_models.groups);
    }

});
4

3 に答える 3

6

@timDunham からの回答は役に立ちましたが、少し複雑すぎると感じました。require.js と Lithium (PHP MVC) をいじって、次のことを思いつきました。シンプルで、私が遭遇した各インスタンスで機能しました。

<script type="text/javascript">
define('bootstrapData', function () {
    return <?php echo json_encode($bootstrapData) ?>;
});
</script>

これは、次の手順を実行することで利用できます。

define(['bootstrapData'], function(bootstrapData) {
    console.log(bootstrapData); // Will output your bootstrapped object
});

明らかに、データを取り込む方法は言語固有ですが、残りは状況に関係なく役立つはずです。

于 2012-03-27T18:54:07.357 に答える
0

次のように、build.js で bootstrapData を無効にすることで、最適化/ビルドの問題を解決できます。

paths: {
    bootstrapData: "empty:",
于 2013-08-08T13:02:53.807 に答える
0

私の方法がベスト プラクティスであるかどうかはわかりませんが、ブートストラップされたモデルをグローバル オブジェクトに突き合わせる代わりに、HTML ページで定義を作成することを除いて、あなたが行っていることとよく似たことを行います。

<script type="text/javascript">
    define("bootstrappedModelJson", function() {
        return @Html.Action("Controller", "RenderModel");
    });

    require({
        baseUrl: //etc.
    }, ["app"],
    function(){

    });
</script>

次に、他のモジュールで必要となる可能性のある js ファイルがcurrent.modelあり、次のようになります。

define(
[
    'require',
    'model'
],
function (require, Model)
{
    var json= require("bootstrappedModelJson");

    return new Model(json);   
});
于 2011-11-04T12:40:44.053 に答える