3

私は RequireJS を使用してバックボーン アプリを整理しています。私のルーター モジュールは次のとおりです。

define([
'jquery',
'underscore',
'backbone',
'collections/todos',
'views/todosview'
], function($, _, Backbone, TodosCollection, TodosView){
var AppRouter = Backbone.Router.extend({

    routes: {
        "": "index",
        "category/:name": "hashcategory"  
    },

    initialize: function(options){
        // Do something
    },

    index: function(){
        // Do something
    },

    hashcategory: function(name){
        // Do something
    }
});

var start = function(){ 
    p = $.ajax({
        url: 'data/todolist.json',
        dataType: 'json',
        data: {},
        success: function(data) {

            var approuter = new AppRouter({data: data});
            Backbone.history.start();
        }
    });     
};

return {
    start: start
};
});

そして、アプリ全体をトリガーするためappに使用する別のモジュールがあります。ここで、Backbone.View モジュールで、このモジュールでルートをトリガーするRouter.start()ために使用したいと考えています。私の View モジュールの開始部分は次のとおりです。Router.navigateRouter

define([
'jquery',
'underscore',
'backbone',
'models/todo',
'views/todoview',
'text!templates/todo.html',
'router'
], function($, _, Backbone, TodoModel, TodoView, todoTemplate, Router){...

しかし、このモジュールで使用したいときはRouter、常にRouter is not defined. 私がやりたいことはRouter.navigate、この View モジュールで何らかのアクションが発生したときに呼び出すことです。では、どうすればこれを達成できますか?

4

3 に答える 3

8

使用する他のすべてのモジュールに含まれる個別のモジュールを作成します。これは、ルーター インスタンスをアタッチし、後で任意のビューまたはモジュールから呼び出すために使用できるオブジェクトを作成するだけです。(データの保存や他のモジュールへの受け渡しなどに加えて)

ここに最初に貼り付けたルーター モジュールにこのモジュールを含めます。ルーター モジュールの下部から開始機能を削除します。そして、そのファイルの最後で AppRouter を返すだけです。

バックボーンを開始してルーターを作成するアプリ モジュールでは、ルーターの初期化を参照していた共有オブジェクトに保存できます。

いえ、

shared.js -> deps はありませんが、YourObject = {}; を作成します。YourObject router.js を返します -> share.js が app.js に含まれています -> shared.js と router.js が含まれています。アプリはルーターをセットアップし、YourObject.router に保存してからバックボーンを開始します。この shared.js モジュールが必要な他のモジュールから YourObject.router.navigate() を呼び出すことができるようになりました

于 2012-04-28T12:32:40.783 に答える
3

これは経験に基づいた推測です;)

おそらく周期的な要件があります。ビュー モジュールにルーター モジュールが必要であり、ルーター モジュールにもビュー モジュールが必要です。

これはデザインの悪臭がしますね。ルーター モジュールは、インスタンス化してレンダリングするために、おそらくビュー/モデルについて知る必要があります。ただし、ビューを作成するルーターがどこかにあることを認識しないでください。彼らがすべきことは、ルーターのルートをトリガーするリンクを提供することだけです。

于 2012-04-28T11:11:57.377 に答える
0

使用について

Backbone.history.navigate('',{trigger:true});

于 2014-04-25T04:48:07.200 に答える