3

私はbackbone.jsを使用してシングルページアプリを作成しています。私はバックボーンに慣れていないので、間違ったセマンティクスは許してください。

私の問題は、ビューをレンダリングするときです。

最初に、いくつかのdom操作(画像スライダー)を実行するjavascriptがindex.htmlにあります。

JSは$(window).load()でラップされているため、開始時にすべて問題ありません。ページがURLからロードされない限り、コードは明らかに実行されません。コードはバックボーンビューまたはルーターからは実行されません。したがって、ページはdom操作なしでロードされます。

ビューのレンダリングおよび初期化関数にコードを挿入しようとしましたが、役に立ちませんでした。このコードをルーターに追加する必要がありますか?それはちょっとしたハックのようです。

「domready」コードはどこに含める必要がありますか?および/またはバックボーンのロード時にビューとそのdom要素を管理するためのより良い方法はありますか?

コード:

home.js

window.HomeView = Backbone.View.extend({
initialize:function () {
    this.render();
},

render:function () {
    $(this.el).html(this.template());

    this.startOrbits();
    return this;
},



startOrbits:function(){
    $(window).load(function() {
        $('#orbit-main').orbit({ fluid: '16x6', swipe:true });
        $('#orbit-news').orbit({ fluid: '8x6', bullets: true, directionalNav:false, captions:true, advanceSpeed: 9000});
    });
},




});
4

2 に答える 2

1

私は解決策を見つけることができました。ルーター関数のifステートメントをコメントアウトした後、問題はスムーズに進みました。

 home: function () {
            // if (!this.homeView) {
                this.homeView = new HomeView();
            // }
            $('#main-content').html(this.homeView.el);
            this.homeView.startOrbits();
            this.headerView.selectMenuItem('home');
        },

これは、すべてのルートトリガーで新しいビューを作成することを意味します。より最適なソリューションをお気軽にご提供ください。

于 2012-10-27T19:23:53.957 に答える
0

しかし、別のビューに移動してから戻ると、コードは明らかに興奮しません

それが何を意味するのかよくわかりません。「エキサイティング」な部分はさておき、ビューに「移動」することはありません。ビューは、ページに要素を追加したり、既存の要素にロジックを追加したりするための単なる方法です。

ただし、推測しなければならない場合は、バックボーンルーターを使用して仮想「ページ」間を移動していると想像します(ビューを使用してそれらのページを作成します)。その場合は、バックボーンルーターのイベントを確認する必要があります。

http://documentcloud.github.com/backbone/#Router

http://documentcloud.github.com/backbone/#FAQ-events

具体的には、(ルーター上の)イベントハンドラーを「route:nameOfYourRoute」または単に:route(仮想ページの読み込みごとにロジックをトリガーする場合)にバインドする必要があると思います。

お役に立てば幸いです。私の推測が間違っている場合は、質問を編集して明確にしてください。

于 2012-10-27T00:20:15.497 に答える