Klasse hinzufügen, um Elemente für die Werte des Attributs mit Rückgrat.ModelBinder
Ich bin mit Rückgrat.ModelBinder in einem Backbone.js Marionetten-Projekt. Ich habe ein Szenario, ich kann nicht herausfinden, wie zu verwenden, ModelBinder, um automatisch zu aktualisieren meine model/UI.
Mein Modell hat einen "status" string-Attribut, mit mehreren Staaten. In diesem Beispiel zeige ich den code für zwei: 'bald', 'someday'
In meinem UI habe ich eine Liste, auf die ich verwenden, klicken Sie auf Veranstaltungen um die Modell-status und update-Klassen markieren Sie den entsprechenden link in der Benutzeroberfläche.
<dd id="status-soon"><a>Soon</a></dd>
<dd id="status-someday" class="active"><a>Someday</a></dd>
events: {
'click #status-soon': 'setStatusSoon',
'click #status-someday': 'setStatusSomeday'
},
setStatusSoon: function () {
this.model.set('status', 'soon');
this.$el.find('.status dd').removeClass('active');
this.$el.find('#status-soon').addClass('active');
},
... etc
Fühlt es sich wie ich tun dies zu einem langatmigen und langweiligen Weg! Den code aufblasen steigt mit der Zahl der Staaten, die ich brauche, zu unterstützen. Was ist der beste Weg, erreichen das gleiche Ergebnis mit ModelBinder?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich könnte man das der Einfachheit halber mit einem data-Attribut, so etwas wie dieses:
dann:
Müssen Sie möglicherweise nicht die
set-status
Klasse, einfach keying Dinge auf die<dd>
s könnte ausreichend sein; ich bevorzuge die Trennung meiner event-handling von der nitty gritty element details, aber.Leider, wird es ziemlich schwierig genau das zu tun, was Sie wollen mit
ModelBinder
. Der Hauptgrund dafür ist, dassModelBinder
zur Verfügung stellen will, den gleichen Wert für alle Elemente, die Teil der single-Auswahl. So tun Sie dies mitModelBinder
obwohl es möglich ist, wird Recht ausführlich auch.Den cleanup-angeboten von mu ist wahrscheinlich besser, als zu versuchen, zu verwenden
ModelBinder
. 1) weil Sie eine click-handler zu tun, diethis.model.set
egal was und 2) müssten Sie individuelle Bindungen fürModelBinder
da der Konverter-Funktion wird aufgerufen, einmal für einen einzigen Selektor und dann der Wert eingestellt, auf der alle passenden Elemente (anstatt einer Schleife durch jedes).Aber wenn Sie wollen, um zu versuchen und etwas zu tun mit
ModelBinder
es würde in etwa so Aussehen:Diese würde tun, was Sie wollen. Natürlich ist die Kehrseite, wie ich oben sagte, ist, dass Sie brauchen mehrere Selektor-Bindungen. Man könnte das verallgemeinern-Konverter mit
this.boundEls[0]
aber Sie müssen noch die verschiedenen Bindungen für Sie zu arbeiten.In Fall, dass Sie wollen, um Zugriff auf das gebundene element ist es möglich, zu erklären, 'html' als elAttrbute, ändern Sie das element und gibt die html-Konverter-Funktion: