3

この例は、Backboneディレクトリデモアプリ https://github.com/ccoenraets/backbone-directory/blob/master/web/js/utils.js#L11から借用しています。

// The Template Loader. Used to asynchronously load templates located in separate .html files
window.templateLoader = {

    load: function(views, callback) {

        var deferreds = [];

        $.each(views, function(index, view) {
            if (window[view]) {
                deferreds.push($.get('tpl/' + view + '.html', function(data) {
                    window[view].prototype.template = _.template(data);
                }, 'html'));
            } else {
                alert(view + " not found");
            }
        });

        $.when.apply(null, deferreds).done(callback);
    }  
};

これは、文字列の配列[views]および[callback]関数で初期化します。

私の質問は、window [view](コード内の正確な位置へのリンクをクリック)を(私が見る限り)以前に初期化されていなかった場合にどのようにチェックできるかということです。正確でない場合は、コメントに記入してください。

4

1 に答える 1

5

私があなたの質問を正しく理解していれば、あなたが電話をするとき、あなたtemplateLoader.loadは2つの引数を渡します。viewsおよびcallback。次に、jQueryメソッドviewsを使用してその配列を反復処理するため、これは配列であると見なすことができます。.each()コールバックは、現在の反復に対応する配列.each()の要素に渡されます。viewsその引数の名前はviewです。

配列viewに格納された任意の値もviews同様です。window次に、の値と一致する識別子を持つのプロパティを見つけようとしますview。私view === "james"たちが探しているならwindow.james

そのアプリのビューのいくつかを見ると、それらが次のように定義されていることがわかります。

window.ContactView = Backbone.View.extend({
    // Some methods
});

ContactViewのプロパティもそうです。次のようにwindow呼び出しtemplateLoader.loadて、そのテンプレートをロードできます。

templateLoader.load(["ContactView"], someCallbackFn);

そして、それが実際にmain.jsのどこで呼び出されるかを確認できます。

したがって、実際に起こっているのは、の一連のプロパティがwindow他のさまざまなファイルで定義され、識別子の配列を渡すことによってテンプレートローダーによってロードされることです。

于 2012-07-15T12:34:09.037 に答える