使用牵线木偶处理锚标签

时间:2013-07-11 17:49:33

标签: jquery jquery-mobile backbone.js marionette

我想要的是在我的 Marionette.ItemView事件中处理锚按钮。我不想在锚标记中使用href 。我想处理项目视图中的点击,并要求主干approuter 更改页面。

我想在单击锚点按钮时将页面从索引切换到 myaccount 。我的模板如下所示

<div>
    <a data-role="button" id="btn_eclipse" class="btn_eclipse_myaccount"><%= val_btn_myaccount %></a>
    <a data-role="button" id="btn_eclipse" class="btn_eclipse_services"><%= val_btn_services %></a>
    <a data-role="button" id="btn_eclipse" class="btn_eclipse_offers"><%= val_btn_offers %></a>
</div>

我的Marionette.ItemView捕获这样的事件

events : {
    'click input[type="button"]' : 'onButtonClick',
    'blur input[type="text"]' : 'onKeyPress',
    'click a' : 'onAnchorButtonClick',
},          
onAnchorButtonClick : function(obj){
    obj.preventDefault;
    var btn_id = $(obj.target).attr('id');
    console.log("The button clicked id is==="+$(obj.target).attr('id'));
    //here i trigger event to change page
}

我无法检索您在锚标记的答案中指定的ID或任何其他属性,例如 href

请告知我该怎么做。

提前致谢。

2 个答案:

答案 0 :(得分:4)

你可以用这样的东西做你想做的事:

var MyView = Backbone.Marionette.ItemView.extend({
  events : {
    "click a" : "handleRouting"
  },

  handleRouting : function (e) {
    e.preventDefault();
    Backbone.history.navigate(/*whatever your route is*/, true);
  }
});

虽然以上方法有效,但我建议做的是做你不想做的事情,即使用href标签上的a并拥有一个挂钩的全局监听器路由。

根据您的评论问题,您可以使用以下内容实现全局侦听器:

$(document).on("click", "a", function (e) {
  var href = $(this).attr("href");
  if (href && href.match(/^\/.*/) && $(this).attr("target") !== "_blank") {
    e.preventDefault();
    Backbone.history.navigate(href, true);
  }
});

如果您使用的是HTML推送API(而不是#!s),那么上述内容将会捕获通过Backbone.Router路由它们的链接点击次数。

答案 1 :(得分:0)

我已使用behavior属性

自动实施v-href来处理此问题

https://github.com/samccone/marionette-behaviors#viewlinks

我在我的所有应用程序中广泛使用它,它就像一个魅力!