あなたのコードをダウンロードして調べました。次のような問題が考えられます。
require.js
でのみ動作しAMDs
ます。バックボーンはもはやサポートしていないのでAMD
。AMD
の有効なバージョンを使用する必要がありますBackbone
。ここで入手できます
TestView は Router の依存関係です。したがって、ルーターがロードされる前にロードされます。
コーディング パターンを改善したい場合があります。これが私の提案です:
App.js
define([
'backbone', 'router', ], function(Backbone, MainRouter){ 'use strict';
var AppView = Backbone.View.extend({
initialize: function(){
App.router = new MainRouter();
Backbone.history.start();
}
});
return AppView;
});
Router.js
define([
'backbone',
'view/TestView'
], function(Backbone, TestView){
var Main = Backbone.Router.extend({
routes: {
'test': 'test'
},
test: function(){
new TestView({
// pass model or collection to the view
// model: new TestModel // remember to require
});
}
});
return Main;
});
編集
イベントを聞く:
// in main.js
var window.Vent = {};
_.extend(window.Vent, Backbone.Events);
// now in any view you can trigger a event
$('something').on('click', function(){
window.Vent.trigger('somethinghappened', this);
// this is reference to current object
});
// now in other view you can do
window.Vent.on('somethinghappened', this.run, this);
// this in the end is the reference we passed when event was triggered
run: function(obj){
//this function will run when the event is triggered
// obj is the object who triggered the event
}
PS: なぜビューでルーターを使用したいのですか?? 私はかなりの数のバックボーン アプリを構築しました。そうする必要はありませんでした。