Zugriff auf DOM Backbone.js Klasse Ansicht
Ich Lerne Backbone.js und hängengeblieben an diesem einfachen Beispiel. Könnten Sie erklären, was falsch mit diesem code, das macht die alert-box Karte leer?
<html>
<head>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.2.2/underscore-min.js" type="text/javascript"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js" type="text/javascript"></script>
</head>
<body>
<div id="test_div">test</div>
<script>
$(function() {
TestView = Backbone.View.extend({
tagName: "div",
initialize: function() {
alert(this.$("#test_div").text());
}
});
window.App = new TestView;
});
</script>
</body>
</html>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was erwartest du? Es gibt keinen text im div, daher ist es warnt leer. Wenn Sie möchten, um zu sehen, text in es Sie haben werde, um etwas zu
this.el
ersten.Edit:
this.$
bezieht sich aufthis.el
ich sehe, dass du versuchst, dass der Zugang. Es sei denn, Sie gebenthis.el
sein Körper wieDann
this.$
arbeiten. Allerdings können Sie einfach weglassen, diethis
und verwenden$("#test_div").text()
$(this.el).text()
und$(this.el).html()
, immer noch das gleiche.el: "body"
hat den job. DanktagName
einfach können Sie ändern, welche Art von leeren Elements Backbone für Sie generiert. So könnten Sie einen leeren Absatz-tag, wie Ihrel
zum Beispiel. Welche Verbindung hat Ihr Blick zu DOM-sofern Sie es nicht ausdrücklich? Wie würden Sie wissen, wo zu suchen? Persönlich würde ich nicht verwenden Körper als Ihreel
und stattdessen wickeln Sie es in ein div-container oder ähnliches.das problem ist, dass Ihr Blick war nicht verpflichtet, dem DOM, können Sie geben Sie ein element bei der Initialisierung Ihrer Sicht dieses Problem zu beheben...
einen anderen Weg, es zu tun, ist die Angabe der el in der Ansicht selbst
für mich sichten funktionieren am besten, wenn Sie Sie in Ihrem container, die gehen nicht über Globale Selektoren in jquery, arbeiten Sie immer von dieser.el ist der Ansicht selbst. wenn Sie brauchen, um etwas zu verändern, außerhalb der div, werfen Sie einen Blick auf auslösen von Ereignissen und abfangen von Ereignissen., Aber natürlich sind Sie frei, um zu arbeiten, wie Sie möchten.
mehr info auf der
el
Attribut eines view: http://documentcloud.github.com/backbone/#View-elBeispiel auf jsfiddle: http://jsfiddle.net/saelfaer/Lp2N2/1/
Beim arbeiten in einem view-Funktion.$ bezieht sich auf diese.el. Sehen Sie diesen code in backbone.js wo die view-Klasse definiert ist, ist dies die $ Instanz bist du eigentlich mit :
So, in diesem.$ ist nicht $ wie Sie wissen, wenn Sie sich in einer view-Funktion. Es ist das äquivalent von scoping - $ manuell so :
Zugriff auf das Globale $ aus einer Ansicht verwenden Sie einfach $. Jedoch, der Gültigkeitsbereich $ gibt es für einen Grund, die Trennung von Bedenken. Ihre anzeigen-code sollte nur die Arbeit mit den Elementen in es. Zugriff auf $Elemente außerhalb einer view wieder einführt spaghetti-code, der genau das, was Rückgrat ist vorgesehen, um zu vermeiden,
Alternativ können Sie nur falsch verstanden, die verschiedenen Möglichkeiten, dass die el kann initialisiert werden. Mithilfe der tagName-Eigenschaft in der view-definition (und auch nicht vorbei an el in der view-Konstruktor) sagen Sie Rückgrat, um erstellen Sie einen div-container für Ihre Ansicht, die die Standard-tagName sowieso, so dass es nicht notwendig ist.
Um eine Ansicht auf eine bestimmte bereits vorhandene element, verwenden Sie einen Selektor als el in Ihrer view-definition eg;