Javascript “一个人是怎么做的?”;听听路由器的声音;(在视图/模型中响应路由器事件)在Backbone.js中?
在Backbone.js文档中,如中所述 当访问者按下后退按钮,或输入URL,并匹配特定路线时, 操作的名称将作为事件激发,以便其他对象可以侦听路由器, 并得到通知 我试图在这个相对简单的示例中实现这一点: 相关JS:Javascript “一个人是怎么做的?”;听听路由器的声音;(在视图/模型中响应路由器事件)在Backbone.js中?,javascript,backbone.js,Javascript,Backbone.js,在Backbone.js文档中,如中所述 当访问者按下后退按钮,或输入URL,并匹配特定路线时, 操作的名称将作为事件激发,以便其他对象可以侦听路由器, 并得到通知 我试图在这个相对简单的示例中实现这一点: 相关JS: $(document).ready(function(){ // Thing model window.Thing = Backbone.Model.extend({ defaults: { text: 'THIS IS A
$(document).ready(function(){
// Thing model
window.Thing = Backbone.Model.extend({
defaults: {
text: 'THIS IS A THING'
}
});
// An individual Thing's View
window.ThingView = Backbone.View.extend({
el: '#thing',
initialize: function() {
this.on('route:showThing', this.anything);
},
anything: function() {
console.log("THIS DOESN'T WORK! WHY?");
},
render: function() {
$(this.el).html(_.template($('#thing-template').html(), {
text: this.model.get('text')
}));
return this;
}
});
// The Router for our App
window.ThingRouter = Backbone.Router.extend({
routes: {
"thing": "showThing"
},
showThing: function() {
console.log('THIS WORKS!');
}
});
// Modified from the code here (from Tim Branyen's boilerplate)
// http://stackoverflow.com/questions/9328513/backbone-js-and-pushstate
window.initializeRouter = function (router, root) {
Backbone.history.start({ pushState: true, root: root });
$(document).on('click', 'a:not([data-bypass])', function (evt) {
var href = $(this).attr('href');
var protocol = this.protocol + '//';
if (href.slice(protocol.length) !== protocol) {
evt.preventDefault();
router.navigate(href, true);
}
});
return router;
}
var myThingView = new ThingView({ model: new Thing() });
myThingView.render();
var myRouter = window.initializeRouter(new ThingRouter(), '/my/path/');
});
相关HTML:
<div id="thing"></div>
<!-- Thing Template -->
<script type="text/template" id="thing-template">
<a class='task' href="thing"><%= text %></a>
</script>
但是,视图的initialize函数中引用的router事件似乎没有被拾取(其他一切都可以工作——我正在成功地调用路由器中定义的“showThing”方法)
我相信我一定对本声明的文档意图有一些误解。因此,我希望得到的回应是:我希望有人修改我的代码,使其通过视图拾取的路由器事件工作,或者,清楚地解释我上面列出的路由器文档打算我们做什么,理想情况下使用替代代码示例(或者使用我的,修改过的)
非常感谢您提供的任何帮助 这是因为您将侦听器绑定到了错误的对象。在您的视图中尝试以下操作:
window.ThingView = Backbone.View.extend({
initialize: function() {
myRouter.on('route:showThing', this.anything);
},
...
好的,明白了。我想我误解了这一部分:“…以便其他对象可以侦听路由器”,以某种方式将其解读为“…其他对象可以侦听路由器事件”。我想这意味着,从架构上讲,最好实例化一个全局路由器,该路由器视图可以根据需要引用。谢谢,德林切夫!你不应该使用
router.on('route:thing',this.anything')代码>在您的初始化方法中?