从整体上理解backbone.js
编辑:这个问题非常类似,但更“概念化”一点 假设一个单页应用程序具有反映从整体上理解backbone.js,backbone.js,Backbone.js,编辑:这个问题非常类似,但更“概念化”一点 假设一个单页应用程序具有反映路由的静态链接反弹: <!-- Top navlist --> <ul class="nav nav-list"> <li><a class="active" href="#/customers">Customers</a></li> </ul> <!-- Left navlist --> <ul class="n
路由的静态链接反弹:
<!-- Top navlist -->
<ul class="nav nav-list">
<li><a class="active" href="#/customers">Customers</a></li>
</ul>
<!-- Left navlist -->
<ul class="nav nav-list">
<li><a class="active" href="#/customers">Show customers</a></li>
<li><a href="#/customers/new">Create customer</a></li>
</ul>
我不能说是“最佳实践”,但我相当肯定,仅仅为了表示应用程序内链接而涉及模型,正如你所说的,绝对是矫枉过正,而不是它们的预期用途
我个人会做一些类似于模式4的事情。在我目前正在进行的一个项目中,我有一个AppView,看起来有点像这样:
AppView = Backbone.View.extend({
events: {
"click a.internal" : "handleLink"
},
handleLink: function (event) {
var route = $(event.target).attr('data-route');
router.navigate(route, true);
return false;
},
});
我不使用锚点标记上的实际href
属性来指定目标路线,因为我使用的是pushState。相反,我使用元素类internal
,来指示用于我的应用程序内部导航的锚定标记。然后我使用另一个任意元素属性,route
,来指示链接应该去哪里
链接可能看起来像这样,然后:
添加额外的位来添加您想要的CSS类,只需在handleLink
中调用jQuery/Zepto即可
同样,我不一定认为这是一种常见/最佳实践,但至少就我的目的而言,它似乎足够简单和直接(也适用于pushState)
编辑:出于语法有效性考虑,请使用steveax关于数据路由的建议。+1作为解释。但我认为,router.navigate
将打破MVC模式背后的理念。路由器应该检索数据并提供正确的视图。这就是它应该做的,IMHO。也许最好使用数据路由,有效的语法。打得好,steveax。我更新了我的答案。格雷莫,我不知道你的意思。路由器正在检索数据并为视图提供服务——所有这些都是让路由器对链接点击做出反应。查询/视图逻辑仍然在路由器中,没有更多,也没有更少。
AppView = Backbone.View.extend({
events: {
"click a.internal" : "handleLink"
},
handleLink: function (event) {
var route = $(event.target).attr('data-route');
router.navigate(route, true);
return false;
},
});