backbone.js Veranstaltung verbindlich bricht radio-Tasten-Funktionalität
Ich bin ziemlich neu im Backbone.js aber ich bin mir ziemlich sicher, ich mache das richtige.
Hier sind mein Rückgrat anzeigen und Modelle:
//USER-MODELL
var User = Backbone.Model.extend({
defaults: {
UserID: 0,
FirstName: "",
LastName: "",
Assignment: 0,
Selected: false
},
toggle: function (){
var value = this.get("Selected");
this.set({ Selected : !value });
}
});
//USER ANZEIGEN
var UserView = Backbone.View.extend({
parentview: null, //the parent view
initialize: function () {
this.parentview = this.options.parentview
this.template = $("#user-template")
this.model.bind("change", this.render, this);
},
render: function () {
var content = this.template.tmpl(this.model.toJSON());
$(this.el).html(content);
return this;
},
events: {
"click ul li": "toggle"
},
toggle: function () {
this.model.toggle();
}
});
Und hier ist das JQuery-template, dass ich verwende für die einzelnen Benutzer anzuzeigen. Die view gerendert wird, die innerhalb einer anderen großen anzeigen, das ist die Sammlung.
<ul id="user-container"
{{if Selected == 1 }} class="selected" {{/if}}
>
<li class="col1" {{if Selected == 0}} style="visibility:hidden" {{/if}} >
<img src="@Content.ImageUrl("pin-icon.png", "base")" />
</li>
<li class="col2">${FirstName} ${LastName} </li>
<li class="col3-last">
<input id="radio-${$item.view}-PM-${UserID}" name="radio-${$item.view}-${UserID}" type="radio" value="1" class="button"
{{if Assignment == 1}} checked="checked" {{/if}}
/>
<label for="radio-${$item.view}-PM-${UserID}">
PM</label>
<input id="radio-${$item.view}-SV-${UserID}" name="radio-${$item.view}-${UserID}" type="radio" value="2" class="button"
{{if Assignment == 2 }} checked="checked" {{/if}}
/>
<label for="radio-${$item.view}-SV-${UserID}">
STAFF</label>
<input id="radio-${$item.view}-NA-${UserID}" name="radio-${$item.view}-${UserID}" type="radio" value="0" class="button"
{{if Assignment == 0 }} checked="checked" {{/if}}
/>
<label for="radio-${$item.view}-NA-${UserID}">
NONE</label>
</li>
</ul>
In den letzten li
ich habe drei radio-buttons, mit dynamischen id ' s und den gleichen Namen (auch dynamische). Jede Taste hat ein eigenes label.
Alles war in Ordnung arbeiten, die radio-buttons waren Auswahl und machen Ihren job gut, bis ich fügte hinzu, diese Linie "click ul": "toggle"
in der Ansicht Ereignisse.
Den Fall funktioniert, wenn ich auf jedem Benutzer die Zeile in der Ansicht, wird das Modell aktualisiert, und der Benutzer wird ausgewählt /abgewählt.
Einzige Sache ist, dass mit dieser Linie, die radio buttons funktionieren einfach nicht.
Die Werte sind gesetzt, aber es passiert nichts, wenn ich versuche, um den Wert zu ändern (klicken Sie auf einen anderen radio-button).
Kein Fehler generiert wird, in der browser-Konsole, die ist komisch...
KORREKTUR: Wenn ich auf ein Optionsfeld klicken, wird das click-Ereignis von backbone-Ansicht ausgelöst wird, die Auswahl ist getan, aber der button bleibt deaktiviert. Es scheint, dass backbone übernimmt, aber ich will trigger nur, wenn ich auf den
ul
Teil, nicht auf andere Elemente im inneren, wie Schalter, Taster, etc.Jedoch, wenn ich auf die Bezeichnungen für die Tasten, passiert nichts. Kein Rückgrat-Ereignis ausgelöst wird, und keine Schaltfläche ausgewählt ist.
Jemand eine Idee warum das passieren könnte?
InformationsquelleAutor noir | 2011-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird die checkbox nicht in der Benutzeroberfläche geändert wird, weil, wenn eine checkbox geklickt wird, wird das click-Ereignis überträgt, um den "li" - element und Knebel-callback aufgerufen wird. Wenn der toggle-callback aufgerufen wird, Sie sind re-Rendern Ihre ganze Sicht, und da der "Assignment" - Attribut des User-Modell nicht verändert, Sie sind re-rendering-Ansicht mit dem gleichen Zustand "geprüft", wie vorher.
Können Sie dieses problem lösen, indem zur Verhinderung der Ausbreitung von click-Ereignis, wenn es initialisiert wird, indem Sie den radio-button. Zum Beispiel fügen Sie folgenden radio-button-Klick-handler zu Ihrer Ansicht:
Dieser fängt das click-Ereignis aus, wenn der radio-button geklickt wird, und verhindern, dass Ihr Knebel-callback nicht aufgerufen wird. Bemerken, dass ich auch die Aktualisierung der Zuordnung Attribut in den Benutzer-Modell so, dass wenn die view neu gerendert, die nächste Zeit, Ihr aufgegebenes Staat richtig gesetzt werden.
InformationsquelleAutor Johnny Oshika