3

我想要的是处理我的Marionette.ItemView 事件中的锚按钮单击。我不想在锚标记中使用 href。我想处理我的 itemview 中的点击并要求骨干 approuter更改页面。

我想通过单击锚按钮将我的页面从索引切换到我的帐户。我的模板如下所示

<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 。

请建议我该怎么做。

提前致谢。

4

2 回答 2

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.

于 2013-07-11T18:05:28.377 回答
0

我已经实现了一个behavior使用v-href属性自动处理这个问题

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

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

于 2014-07-23T22:31:31.320 回答