backbone.js(またはJavascript?)のようなものは、私が期待していない奇妙な振る舞いをしています。これは、(のCoffeeScriptで)私(簡体字)バックボーンビューです:
class Application.Views.Sidebar.SidebarView extends Backbone.View
el: "#backbone-sidebar"
template: JST["backbone/templates/sidebar"]
initialize:() ->
# Yes, I am currently skipping addOne and addAll functions,
# because it is not needed to reproduce the problem
Articles.bind 'all', @render
Articles.fetch()
render: =>
$(@el).html(@template())
@
問題がrender
機能である:私は、デバッガでこれを実行すると@el
は未定義です。また、$()
関数は、backbone.jsによって一部のgetElementById
ラッパーに再定義されています。 window.$("#backbone-sidebar")
を使用すると正しいjQuery機能が得られますが、これは回避策に過ぎません。
jQueryの$()
を入手する方法はありませんか?
なぜ@el
は未定義ですか?
デバッグ後、jsfiddle.netで問題を再現することはできませんでしたが、コードで解決しました。 私は、Survey Collectionがロードされる前であっても、 'SidebarView'の宣言の最後に' window.Sidebar = new Application.Views.Sidebar.SidebarView'を呼び出していました。どういうわけかこれは何かを台無しにしました。今私は '$ - > window.Sidebar =新しいApplication.Views.Sidebar.SidebarView'を呼び出すと、それは魔法のように動作します。 – iblue
'#backbone-sidebar'要素はDOMにまだありませんでした。それが呼び出されたときに定義されていなかった理由です - サイドバーインスタンスを作成するために変更したときにonDocumentReadyターゲット要素が既に作成されていて動作しました –
@TomTu: @ el'は文字列を含んでいますが、なぜDOMツリーの影響を受けますか? – iblue