我正试图从其子视图触发父视图事件。但似乎父视图的事件没有被触发。
以下是我的代码示例:
<!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>
我试图从谷歌搜索找到的许多解决方案中得到提示,但似乎我在某个地方受到了打击。我找到的一些选项是:
1 / How to trigger an event from child view to parent view in backbonejs and requirejs
答案 0 :(得分:5)
问题是你使用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");
}
});
希望它有所帮助!
答案 1 :(得分:2)
您的listenTo
使用率略有下降
签名为object.listenTo(otherObject, event, callback)
,因此您需要以下内容:
this.listenTo(this.subview, "testGo", this.addFoo);
告诉this
收听事件this.subview
的{{1}},并在触发事件时致电testGo
答案 2 :(得分:1)
试试这个
this.listenTo(this.subview, "testGo",this.addFoo);
签名:
object.listenTo(other, event, callback)
答案 3 :(得分:0)
触发事件:
Backbone.Events.trigger('<eventname>', {data1 to be passed with event}, {data2 to be passed with event}...);
听众:
Backbone.Events.bind('<eventname>', callback, context);