在todomvc骨干示例中,为什么在控制器中使用事件绑定而不是路由?

时间:2014-01-01 16:29:06

标签: javascript asp.net-mvc backbone.js backbone-routing todomvc

例如,在app-view.js中,我看到一些事件绑定:

    events: {
        'keypress #new-todo': 'createOnEnter',
        'click #clear-completed': 'clearCompleted',
        'click #toggle-all': 'toggleAllComplete'
    },

但在我看来,控制器中的路由可以完全取代事件绑定,例如:

var TodoRouter = Backbone.Router.extend({
    routes: {
        '*filter': 'setFilter',
         'todo/add': 'add',
         'todo/edit/:id': 'edit',
         'todo/delete/:id': 'delete'
    },
    add: function () {...},
    edit: function () {...},
       ......
});

只需用链接替换按钮,我认为使用路线使其更像mvc应用,就像ASP.NET MVC

一样

为什么它仍然使用事件绑定?

1 个答案:

答案 0 :(得分:1)

你的问题很好,但举一个例子:

1.假设您为单个视图使用了不同事件的路由。您的所有点击都将进入完全不需要的路由器
2.现在有10个不同的视图,其中有20个不同的点击。
你会在路由器中分配吗?按钮单击或按键单击不是一条不同的路线 它们只是您应该在特定视图中处理的事件
3.此外,骨干路由仅在散列更改时触发。如果您使用路由器进行事件,则可能是骨干网将允许您在该路线未更改后单击一次。因此,下一次单击事件将不会被捕获。

因此,将每个功能保持独立是一个很好的做法,以便它能够发挥最佳性能并且代码也可以管理。