1

私は現在、次のようにモデルを設定しています。

var Contact = Backbone.Model.extend({
    defaults: {
        photo: "img/placeholder.png",
        name: "",
        address: "",
        tel: "",
        email: "",
        type: ""
    }
});

そして私のコレクションは次のようになります:

var Directory = Backbone.Collection.extend({
    model: Contact
});

次に、メインの app.js ファイルで、これを実行してルートを定義します。

var AppRouter = Backbone.Router.extend({

    initialize:function () {
        $('#header').html(new HeaderView().render().el);
    },

    routes: {
        "filter/:type": "urlFilter"
    },

    urlFilter: function (type) {
        directory.filterType = type;
        directory.trigger("change:filterType");
    },

});

「ディレクトリ」が未定義であることを示す以下のコードでエラーが発生します。

    directory.filterType = type;
    directory.trigger("change:filterType");

私の見解では、コレクションを次のように新しくしました。this.collection = new Directory(contacts);

私はバックボーンにかなり慣れていないので、正しい順序で物事を行っているかどうか、filterType と Trigger を実行しようとしているときにコレクションが存在しないかどうか、または物事を完全に持っているかどうかはわかりません違う。

私のコードは、 http://dan.ms/backboneで見ることができます。

感謝して受け取ったポインタ。

4

1 に答える 1

0

へのdirectoryコールバックで変数が作成されているようtpl.loadTemplatesです。変数は、ルーター内でアクセスされているスコープでは使用できません。directoryこれを行う 1 つの方法は、AppRouterコンストラクターにパラメーターとして渡すことです。のコンストラクターでAppRouterプロパティとして保存しurlFilter、現在のインスタンスを介してメソッドでアクセスします。

var AppRouter = Backbone.Router.extend({
  initialize: function (options) {
    this.directory = options.directory;
  },

  urlFilter: function (type) {
    this.directory.set("filterType", type);
  }
});

// Initialize with:
var directory = new DirectoryView;
var app = new AppRouter({ directory: directory });
Backbone.history.start();
于 2012-07-22T10:30:12.053 に答える