Mam kolekcję, która tworzy UL za pomocą LI PeastView.

Chciałem użyć numeru indeksu elementu (liczba) w szablonie podkreślenia. to znaczy.:

hello (item 0)
world (item 1)

Czy ktoś wie, jak korzystać z liczenia w marionetce? Chcę uniknąć umieszczania go w modelu.

Właśnie to chciałbym wyglądać na szablon użytkownika (z licznikiem N jako liczby pozycji):

<script id="task-template" type="text/html">
          <div class="order"><%=n%></div>
          <div class="title-container">
               <a href="#">...</a>
          </div>
 </script>

Każda pomoc doceniona,

Twoje zdrowie,

2
Guy 12 sierpień 2012, 14:31

2 odpowiedzi

Najlepsza odpowiedź

Powinno to być łatwe, ponieważ model w kolekcji może łatwo uzyskać potrzebne informacje. Musisz utworzyć opakowanie "Zobacz model" wokół swojego modelu, abyś mógł chwycić dodatkowe informacje.


var createViewModel(model){

  // inherit from the original model
  var vm = Object.create(model);

  // override the original `toJSON` method
  vm.toJSON = function(){
    var json = model.toJSON();

    // add the index
    json.index = model.collection.indexOf(model);

    return json;
  }

  return vm;
}

Ten model widoku będzie używany bezpośrednio przez Pozycje, bezpośrednio.


MyItemView = Backbone.Marionette.ItemView.extend({
  template: "#my-item-view-template",

  initialize: function(){

    // replace the model with the the view model
    this.model = createViewModel(this.model);

  }
});

MyCollectionView = Backbone.Marionette.CollectionView({
  itemView: MyItemView
});

I to wszystko.

Po przekazaniu kolekcji do konstruktora MyCollectionView i renderowanie widoku kolekcji, zostanie utworzony nowy model widoku dla każdej instancji elementu, w momencie instancji pastview jest tworzony. Szablon może teraz spowodować index z modelu.

Model widoku dziedziczy z oryginalnego modelu bezpośrednio, więc wszystkie metody i atrybuty są nadal dostępne. Nadpisanie metody toJSON pozwala uzyskać oryginalny JSON z oryginalnego modelu, a następnie rozszerzyć go z dowolnymi potrzebnymi danymi. Twój oryginalny model nigdy nie jest modyfikowany, ale model widoku elementu jest używany ma potrzebne dane.

3
Derick Bailey 12 sierpień 2012, 12:19

Właśnie znalazłem łatwy sposób na to. (z Marionette V1.0.0.0-RC6)

Korzystanie z szablonów właściwość.

W widoku przedmiotu:

MyItemView = Backbone.Marionette.ItemView.extend({
    template: "#my-item-view-template",

    templateHelpers: function(){

        var modelIndex = this.model.collection.indexOf(this.model);
        return {
            index: modelIndex
        }

    }
});

W szablonie możesz wydrukować indeks za pomocą:

<%= index %>

To wszystko.

9
zhi cheng 14 marzec 2013, 06:22