0

アプリケーションにルーターがあり、URL を入力すると期待どおりに応答するようになりました。たとえば、www.example.com#search/groupa と入力すると、適切な結果が返されます。ユーザーがそれをカットアンドペーストして別のユーザーに送信できるように、検索機能でナビゲートを呼び出して URL を設定しようとしました。問題は、それをしようとすると次のエラーが発生することです:「Uncaught TypeError: Object function (){return i.apply(this,arguments)} has no method 'navigate'」

IEG = new Backbone.Marionette.Application();

IEG.addRegions({
searchBox: '#searchBox',
resultBox: '#resultBox',
modalBox: '#modalBox',
recipientBox: '#recipientBox',
confirmBox: '#confirmToggleActive'
});

IEG.vent = _.extend({}, Backbone.Events);


IEG.vent.on("default", function () {

var SBV = new SearchBoxView();
IEG.searchBox.show(SBV);
IEG.searchColl = new GroupEntries();
IEG.searchColl.fetch({
    data: {
        cmd: 0, //search groups
        searchStr: null //if null show all groups
    },
    success: function (data) {
        searchResults = new SearchResultsView({ collection: IEG.searchColl });
        IEG.resultBox.show(searchResults);
    }
});
});

IEG.vent.on("searchGroups", function (searchStr) {
IEG.Router.navigate("search" + searchStr);   // CALLING NAVIGATE HERE
IEG.searchColl.fetch({
    data: {
        cmd: 0, //search groups
        searchStr: searchStr
    },
    success: function (data) {
        searchResults = new SearchResultsView({ collection: IEG.searchColl });
        IEG.resultBox.show(searchResults);
    }
});
});

IEG.Router = Backbone.Router.extend({
routes: {
    '': 'index',
    'search/:str': 'search',
    'edit/:grp': 'edit'
},

index: function () {
    IEG.vent.trigger("default");
},

search: function (str)
{
    IEG.vent.trigger("searchGroups",str);
}
});

$(document).ready(function () {

    IEG.start();
    new IEG.Router;
    Backbone.history.start();
});
4

1 に答える 1

0

navigateクラスの定義ではなく、クラスのインスタンスを呼び出す必要がありRouterます (現在行っているように)。次のように、ドキュメント対応ハンドラーのコードを更新してみてください。

$(document).ready(function () {
    IEG.start();
    IEG.router = new IEG.Router(); // Store an instance of the router on the Application
    Backbone.history.start();
});

そして、あなたのsearchGroupsハンドラーは次のようになります:

IEG.vent.on("searchGroups", function (searchStr) {
     IEG.router.navigate("search" + searchStr);   // call navigate on the instance

     // Fetch code .....
});
于 2013-09-26T20:30:01.183 に答える