有没有办法将 bindData 传递给 Marionette's bindTo
,类似于 jQuery 的绑定?
我在 jQuery 的网站上读到,您可以执行以下操作来传递 bindData:
function myFunction(event){
console.log(event.data.foo); // output "bar"
};
$(".some-element").bind("click", {foo:"bar"}, myFunction);
我想这样做的原因是因为我将多个函数绑定到一个路由。
第一个函数只是使用路由中的参数,没什么特别的。
第二个函数需要将自定义数据传递给它,这就是 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);
第二个绑定
这是我失败的地方:(
我想将自定义数据对象传递给函数。
在另一个函数中,我想显示 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);
更具体地说,第一个函数应该改变我页面的内容。第二个功能应该突出显示我的导航菜单中的一个项目。我想发送给我的函数的自定义对象基本上是菜单项的元素 ID,因此我可以向它添加一个类。
我只是以错误的方式接近这个吗?任何输入都会有所帮助。