2013-02-01 7 views
8

私はBackbone.jsを手に入れようとしていますが、私が理解していないことは、ページを設定するために必要な一回限りのjQueryコードを置く場所です。Backbone.js:jQueryセットアップはどこに置くのですか?

jQueryカルーセルプラグインの設定、「上へのスクロール」矢印の追加...ユーザーが最初にページを読み込んだときに起こる一回限りの設定。

var AppRouter = Backbone.Router.extend({ 
    routes: { 
    // some routes 
    }, 
    initialize: function() { 
    initializeJqueryStuff(); 
    } ... 
}); 
var StateApp = new AppRouter(); 
Backbone.history.start({ 
    pushState: true 
}); 
function initializeJqueryStuff() { 
    // one-off jQuery stuff goes here 
} 

Yeuch:私は私のルータでそれをやっている時点では

。私はどのようにそれをやっていますか? initializeJqueryStuffは、ルータオブジェクトの別のプロパティにする必要がありますか?すべてがちょうどinitializeの中に住んでいますか?または、私は実際にこのコードをBackboneアプリケーションから完全に分離しておくべきですか?

+0

は、あなたは私のjQueryのコードは、開始ページのロード/アプリに実装する必要があるものの例を与えることができますか?私は通常、ビュー内にjQueryコードを持っています。だから、あなたが達成しようとしているものによっては、ビューがレンダリングされた後にjQueryコードをトリガーする「レイアウトビュー」を持つことができます。それでは、アプリの開始時にjQueryコードを初期化する必要があるかどうかを私に知らせることができれば、私はもっと助けになります。 – TYRONEMICHAEL

答えて

1

私は通常、LayoutViewを定義します。これは、アプリケーションのすべての「実際の」ビューをレンダリングするルートビューです。このレイアウトビューは、他のビューコードを実行する前に一度だけ初期化されます。また、私は一回限りのビュー設定を行う傾向があります。

サンプル:

//LayoutView should be considered a singleton, only initialized once 
var LayoutView = Backbone.View.extend({ 
    el:'body', 

    initialize: function() { 
     this.initializeSomejQueryStuff(); 
    }, 

    renderChild: function(child) { 
     if(this._currentChild) 
      this._currentChild.remove(); 
     this._currentChild = child; 
     this.$el.html(child.render().el); 
    }, 

    initializeSomejQueryStuff: function() { 
     //init here 
    } 
}); 

使用法:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "foo/:id": "foo" 
    }, 

    initialize: function() { 
     this.layout = new LayoutView(); 
    }, 

    foo: function(id) { 
     var model = new Foo({id:id}); 
     var view = new FooView({model:model}); 

     //delegate the view rendering to a layout 
     this.layout.renderChild(view); 
    } 
}); 
+0

面白いアプローチは、ありがとう! – Richard

0

ええええええええええええええれば申し訳ありませんが、私の悪い英語の場合はいくつかの詳細を忘れてしまいます。しかし、私はあなたの質問の主なポイントを見ることができます:どこであなたがjQueryを構成し、配置することができるか、それはバックボーンに関連していないものですか?あなたはこのコードを分けて、単に.htmlでリンクすることができます。

バックボーンのわずかなMVCです。 Backbone.View.extend({...})では、レンダリングの機能やビューに関連するいくつかのjsものを操作することができますが、まったく別のものに対して異なる構造を作るのが良い点だと思います。このようななめらか:

.../ 
    public/ 
     css/ 
     img/ 
     lib/ 
      ..any source code for your plugins.. 
     tpl/ 
      ..for your templates.. 
     js/ 
      models/ 
       models.js 
      views/ 
       ..your views.js.. 
      main.js(your backbone router and for example, .loadTemplate() func for templates and other) 
      ..any code for plugings configuration.. 

は、だから私は、構造が明確なコーディングあなたを取るどのようなソースが何であるかを理解するのに役立つことができると思いますとおり。

ご希望でしたら幸いです。ごめんなさい。

+0

よかった、ありがとう。私の問題は、バックボーンを起動する前にjQueryのすべてをロードする必要があることです(私のバックボーンビューにはjQuery要素が正しく初期化されているためにいくつかのイベントがあるためです)。 '$(document).ready()'の中にjQueryファイルとバックボーンファイルをラップすると、すべてが正しい順序でロードされることを確認できますか? – Richard

+0

@リチャード・アホー....そうだね。ビューのみがいくつかのjQuery要素に依存する場合。ビューをリンクする前に、この要素を含むファイルをその位置に置いてください。ドキュメントフローは段階的に読み込まれます。 htmlの最初の読み込みです。さまざまなブラウザで異なるローディングのキューがありますが、問題は発生しません。そのすべてがフローのようになります。それを再生してみてください:) – Pruntoff

関連する問題