1

私は backbone.js が初めてで、ルートやビューなどがどのように機能するかを理解しようとしていますが、同じビューのイベントの構築に問題があります。これが私の言いたいことを正確に示すクリップです。http://screencast.com/t/QIGNpeT2OUWu

これは、バックボーン ルーターがどのように見えるかです。

var Router = Backbone.Router.extend({

    routes: {
        "pages": "pages",
    }
    pages: function () {
        var page_view = new PageView();
    }
});

したがって、[ページ] リンクをクリックすると、新しい PageView が作成され、これが使用しているコードです

PageView = Backbone.View.extend({
    el: $("#content"),
    initialize: function () {
        $.ajax({
            url: '/pages',
            success: function (data) {
                $("#content").html(data);
            }
        });
    },
    events: {
        "click td input[type=checkbox]": "updatePublishedStatus"
    },
    updatePublishedStatus: function (event) {
        console.log('update publish status');
    }
});

かなり基本的なことだと思いますが、クリップでわかるように、/pages に移動するたびに別のイベントがチェックボックスに登録されます。

4

2 に答える 2

2

ここでうまくいかないことがいくつかあります。

  1. あなたのビデオは、ページがコレクションであることをよく示していますPages。ページ名、スラッグ、公開などの属性を持つこと...あなたはそれを欠いており、それは傷つくでしょうPages. Backbone.ModelHTML を読み込んで DOM にプッシュするだけではいけません。これは、そもそも Backbone を使用する目的全体に反します。
  2. ページのモデルを作成すると、ビューが作成されます。次に、/pages ルートにコレクション ページなどのビューが表示されます。
  3. ビューの初期化内ではなく、ページがコレクションpages.fetch();のインスタンスである場所を実行して、データをフェッチします。Pagesこれは、ルーターを初期化する前に発生する可能性があります。
  4. ビューで属性を変更すると、個々のモデルが更新されます。

余談ですが、初期化時にデータをフェッチするのは良くありません。実際にデータを取得する前に render() を呼び出すことができますが、それは面白くありません。また$('#content')、ビューの $el を使用することもできます。のようにthis.$el.html(...);

于 2012-02-20T21:14:45.833 に答える
1

var page_view = new PageView()の外側に移動しますRouter.pages()

成功のPageView.initialize()コールバックを変数に保存dataします。モデル内またはモデル内のいずれかPageView

そのセットにrender関数を追加します。PageView$("#content").html(data);

page_view.render()以内にお電話くださいRouter.pages()

于 2012-02-20T20:34:19.493 に答える