2

これが本来のやり方ではないことは承知していますが、レガシーな jQuery アプリがあり、それをバックボーンに移動することについていくつかの議論がありました。魅力的な慣用句の 1 つに、次のようなものがあります。

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

予備テストでは、これは機能しません。これへの参照が機能していないようです。これまたはこのようなことは可能ですか?

thx事前に

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 に答える