pra*_*432 3 javascript json coffeescript backbone.js
我有这个代码 -
class TableManager
tables : {}
tableViews :{}
nextId : 0
rootEl : 'body'
addTable:(json,el)->
newTableModel = new TableModel(json,@nextId)
newTableModel
@tables[@nextId] = newTableModel
el = "#table1"
newView = new TableView({model : newTableModel, columns : json["Columns"], el : el, id : @nextId})
@tableViews[@nextId] = newView
newTableModel.renderModel()
@nextId++
class TableView extends Backbone.View
tableId : ''
columns : ''
thead : ''
tbody : ''
input : ''
rows : ''
inputId : ''
typingTimer : ''
doneTypingInterval : 2000
el : '#table1'
initialize:()->
@model.bind "render", @render
@tableId = "resultsTable#{@options.id}"
@inputId = "filterInput#{@options.id}"
@columns = @options.columns
render:()=>
console.log "EL"
console.log $(@el)
console.log @el
Run Code Online (Sandbox Code Playgroud)
console.log @el总是未定义的.我不知道为什么,我正在设置this.el我认为?是因为事件发生后调用了渲染吗?
id="table1"实例化时,DOM中没有元素TableView.例如,如果您在DOM中没有任何内容执行此操作:
class V extends Backbone.View
el: '#no-such-element'
render: => console.log @el
v = new V
v.render()
Run Code Online (Sandbox Code Playgroud)
你会undefined在控制台得到一个.
演示:http://jsfiddle.net/ambiguous/ne39B/
如果你想让Backbone创建一个id="table1"元素,那么你需要使用不同的属性来告诉Backbone这样做; 该View#el文件规定:
this.el从视图的创建tagName,className,id和attributes特性,
所以你有一些选择:
#table1创建视图时确保在DOM中.el实例化时传递给视图:v = new TableView(el: some_dom_object).tagName,className,id,和attributes查看属性得到骨干,构建相应的DOM元素为您服务.此外,Backbone不会el为您添加视图到DOM,即使Backbone构建视图,el您也必须自己将其添加到DOM中.