2

我知道这不是您应该这样做的方式,但我们有一个遗留的 jQuery 应用程序,并且已经讨论过将其移至主干。一个吸引人的成语是这样的:

<script type="text/html" id="mi_form_template">
  the data-item-id is the value we are interested in!!!
 <button id="item" data-item-id='23'>here is item</button>
  </script>

我知道您不应该将这样的信息存储在带有主干的 DOM 中。但希望能够预料到有关此的讨论。

我可以像这样访问 item-id 吗?

ItemsRouter = Backbone.Router.extend({
    routes: {
      "new": "newProduct",
      "": "index"
    },
    newProduct: function() {
      alert('here is newProduct');
      var item_id=$(this).data('item-id'); // <- can we do this???
      new ItemFormView( {model: new Item()});
    },
    ind ...

从初步测试来看,这不起作用 - 看起来对 this 的引用不起作用。这是可能的吗?

提前谢谢

4

1 回答 1

1

通常你会通过视图(不是路由器)访问数据属性,如下所示:

events: {
    'click #item': 'newProduct'
},
newProduct: function(ev) {
    var item_id = $(ev.target).data('item-id');
    // And now do whatever makes sense, possibly even trigger
    // a route that contains `item_id`.
}

路由处理程序不知道是什么触发了它,它只知道它应该处理特定的 URL 模式。如果您想将路由器用于此类事情,那么您需要一个链接:

<a href="/new/23">...</a>

然后在路由器中:

routes: {
    'new/:item_id': 'newProduct'
},
newProduct: function(item_id) {
    // Do things with item_id
}

因此,您仍然可以使用数据属性(Backbone BTW 可以),但您可能会在视图的事件处理程序而不是路由器中访问它们。

于 2012-11-20T06:52:52.577 回答