Javascript 主干-从子视图触发父视图事件
我试图从父视图的子视图触发父视图事件。但似乎父视图的事件没有被触发 以下是我的代码示例:Javascript 主干-从子视图触发父视图事件,javascript,backbone.js,Javascript,Backbone.js,我试图从父视图的子视图触发父视图事件。但似乎父视图的事件没有被触发 以下是我的代码示例: <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script src="http://ajax.cdnjs.com/ajax/libs
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>
<script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
<script>
MySubView = Backbone.View.extend({
id : "MySubView",
initialize: function() {
console.log("pro1");
this.trigger("testGo", "test");
}
});
MyView = Backbone.View.extend({
id : "MyView",
initialize: function() {
console.log("pro");
this.subview = new MySubView();
this.subview.listenTo("testGo", this.addFoo, this);
},
addFoo: function() {
console.log("ok");
alert("ok");
}
});
new MyView();
</script>
</head>
<body>
</body>
</html>
MySubView=Backbone.View.extend({
id:“MySubView”,
初始化:函数(){
控制台日志(“pro1”);
此触发器(“testGo”、“test”);
}
});
MyView=Backbone.View.extend({
id:“MyView”,
初始化:函数(){
控制台日志(“pro”);
this.subview=new MySubView();
this.subview.listenTo(“testGo”,this.addFoo,this);
},
addFoo:function(){
控制台日志(“ok”);
警报(“正常”);
}
});
新MyView();
我试图从谷歌搜索找到的许多解决方案中得到暗示,但似乎我在某个地方被打动了。我发现的一些选项包括:
1/
2/您的
列表的用法有点偏离
签名是object.listenTo(其他对象、事件、回调)
,因此您需要如下内容:
this.listenTo(this.subview, "testGo", this.addFoo);
它告诉this
为事件testGo
侦听this.subview
,并在触发事件时调用this.addFoo
尝试此操作
this.listenTo(this.subview, "testGo",this.addFoo);
签名:
object.listenTo(other, event, callback)
问题是您使用的listenTo是错误的
anObject.listenTo(anotherObject, 'forSomeEvent', function () { console.log('do something'); });
因此,在您的情况下,您应该这样做:
MyView = Backbone.View.extend({
id : "MyView",
initialize: function() {
console.log("pro");
this.subview = new MySubView();
this.listenTo(this.subview, 'testGo', this.addFoo);
},
addFoo: function() {
console.log("ok");
alert("ok");
}
});
希望有帮助 触发事件:
Backbone.Events.trigger('<eventname>', {data1 to be passed with event}, {data2 to be passed with event}...);
Backbone.Events.trigger(“”,{data1与event}一起传递,{data2与event}一起传递;
听众:
Backbone.Events.bind('<eventname>', callback, context);
Backbone.Events.bind(“”,回调,上下文);
我根据您提供的建议将代码添加到。但仍面临一些问题。我也检查了文件,你是对的。明天我会再检查一下。无论如何,谢谢。@turtle嗨,我面临着同样的问题,我可以知道你已经解决了这个问题,在我的情况下,触发器可以从父视图到子视图执行,但不能以相反的方式,因为你的帖子根据你提供的建议添加了代码。但仍有一些问题需要解决。我明天会进一步检查。无论如何,谢谢。这个例子如果有一些解释会更有帮助。