Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从整体上理解backbone.js_Backbone.js - Fatal编程技术网

从整体上理解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;
  },

});