0

bindTojQueryのバインドと同様に、bindDataをMarionetteのに渡す方法はありますか?

jQuery の Web サイトで、次のようにして bindData を渡すことができると読みました。

function myFunction(event){
    console.log(event.data.foo); // output "bar"
};
$(".some-element").bind("click", {foo:"bar"}, myFunction);

これを行う理由は、複数の関数を 1 つのルートにバインドしているためです。

最初の関数はルートからのパラメーターを使用するだけで、特別なことは何もありません。
2 番目の関数にはカスタム データを渡す必要があり、そこで bindData の出番です。

コントローラーとルーター

var Controller = {
    page1: function(itemId){
        Vent.trigger('openPageOne', itemId);
    }
};

var AppRouter = Marionette.AppRouter.extend({
    controller: Controller,
    appRoutes: {
        "page1/:itemid" : "page1"
    },
    start: function() {
        Backbone.history.start();
    }
});

最初のバインド
これはうまく機能し、そのルートに移動すると、コンソールに itemId が出力されます。

var MyLayout = Marionette.Layout.extend({
    initialize: function(){
        _.bindAll(this);
    },
    myFunction: function(itemId){
        console.log(itemId);
    }
});

var myLayout = new MyLayout();
myLayout.bindTo(Vent, "openPageOne", myLayout.myFunction);

2 番目のバインド
ここで失敗します :(
カスタム データ オブジェクトを関数に
渡したいのですが、anotherFunction 内で、foo の値を表示したいのです。

var AnotherLayout = Marionette.Layout.extend({
    initialize: function(){
        _.bindAll(this);
    },
    anotherFunction: function(event){
        // Here is where I want to use foo
        console.log(event.data.foo);
    }
});

var anotherLayout = new AnotherLayout();
anotherLayout.bindTo(Vent, "openPageOne", {foo:"bar"}, anotherLayout.anotherFunction);

より具体的に言えば、最初の関数は私のページのコンテンツを変更する必要があります。2 番目の関数は、ナビゲーション メニューの項目を強調表示する必要があります。関数に送信するカスタム オブジェクトは、基本的にメニュー項目の要素 ID であるため、それにクラスを追加できます。

私はこれに間違った方法でアプローチしていますか?どんな入力でも役に立ちます。

4

1 に答える 1

1

これが役立つかどうかはわかりませんが、私はマリオネットでベントを使用する傾向があります.

var app = new Backbone.Marionette.Application();

次に、listenTo (bindTo を置き換える) イベントを使用して起動し、起動するとトリガーします。

app.vent.trigger('App:openPageOne', { 'foo': 'bar'});

次に、ベントリスナーで

app.vent.on('App:openPageOne', function(data) {
}

データは data パラメータに送信されます: data.foo

オブジェクト内でさらにデータを送信することもできます { 'foo1': 'bar1', 'foo2': 'bar2' }

アプリ イベント マネージャーを使用するのが好きです。

于 2013-03-13T14:49:35.633 に答える