Javascript CoffeeScript/主干/木偶-教程示例转换和范围问题
我正在尝试在CoffeeScript中创建此示例的基本版本:。所有依赖项都按照我写它们的顺序(在正文中)声明为.coffee文件,jQuery+下划线+主干+木偶在头部 我有一个模型,东西。咖啡Javascript CoffeeScript/主干/木偶-教程示例转换和范围问题,javascript,backbone.js,coffeescript,marionette,Javascript,Backbone.js,Coffeescript,Marionette,我正在尝试在CoffeeScript中创建此示例的基本版本:。所有依赖项都按照我写它们的顺序(在正文中)声明为.coffee文件,jQuery+下划线+主干+木偶在头部 我有一个模型,东西。咖啡 $ -> console.log 'load model' class Thing extends Backbone.Model defaults: myValue: null initialize: -> console.log 'new
$ ->
console.log 'load model'
class Thing extends Backbone.Model
defaults:
myValue: null
initialize: ->
console.log 'new thing'
window.Thing = Thing
$ ->
console.log 'load collection'
class Things extends Backbone.Collection
model: Thing
window.Things = Things
$ ->
console.log 'load composite model view'
ThingView = Backbone.Marionette.ItemView.extend(
template: '#template-thing'
tagName: 'tr'
)
window.ThingView = ThingView
$ ->
console.log 'load composite collection view'
ThingsView = Backbone.Marionette.CompositeView.extend(
tagName: 'table'
id: 'things'
template: '#template-things'
itemView: ThingView
appendHtml: (collectionView, itemView) ->
collectionView.$('tbody').append itemView.el
)
window.ThingsView = ThingsView
$ ->
console.log 'load app'
# Load default data
thingsCollection = new Things([
new Thing(myValue: 'uno'),
new Thing(myValue: 'dos')
])
data:
thingsCollection: thingsCollection
# Create application, specify default layouts
MyApp = new Backbone.Marionette.Application()
MyApp.addRegions singleRegion: '#content'
# On application init...
MyApp.addInitializer (data) ->
console.log 'Init application...'
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
# Start application
MyApp.start data
我的第一个问题是范围:如果我没有声明window.Thing
,下一个文件(Things
的集合)找不到模型Thing
,等等。我在那里做错了什么
我有一个收藏,东西。咖啡
$ ->
console.log 'load model'
class Thing extends Backbone.Model
defaults:
myValue: null
initialize: ->
console.log 'new thing'
window.Thing = Thing
$ ->
console.log 'load collection'
class Things extends Backbone.Collection
model: Thing
window.Things = Things
$ ->
console.log 'load composite model view'
ThingView = Backbone.Marionette.ItemView.extend(
template: '#template-thing'
tagName: 'tr'
)
window.ThingView = ThingView
$ ->
console.log 'load composite collection view'
ThingsView = Backbone.Marionette.CompositeView.extend(
tagName: 'table'
id: 'things'
template: '#template-things'
itemView: ThingView
appendHtml: (collectionView, itemView) ->
collectionView.$('tbody').append itemView.el
)
window.ThingsView = ThingsView
$ ->
console.log 'load app'
# Load default data
thingsCollection = new Things([
new Thing(myValue: 'uno'),
new Thing(myValue: 'dos')
])
data:
thingsCollection: thingsCollection
# Create application, specify default layouts
MyApp = new Backbone.Marionette.Application()
MyApp.addRegions singleRegion: '#content'
# On application init...
MyApp.addInitializer (data) ->
console.log 'Init application...'
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
# Start application
MyApp.start data
我有一个木偶视图,东西视图。咖啡
$ ->
console.log 'load model'
class Thing extends Backbone.Model
defaults:
myValue: null
initialize: ->
console.log 'new thing'
window.Thing = Thing
$ ->
console.log 'load collection'
class Things extends Backbone.Collection
model: Thing
window.Things = Things
$ ->
console.log 'load composite model view'
ThingView = Backbone.Marionette.ItemView.extend(
template: '#template-thing'
tagName: 'tr'
)
window.ThingView = ThingView
$ ->
console.log 'load composite collection view'
ThingsView = Backbone.Marionette.CompositeView.extend(
tagName: 'table'
id: 'things'
template: '#template-things'
itemView: ThingView
appendHtml: (collectionView, itemView) ->
collectionView.$('tbody').append itemView.el
)
window.ThingsView = ThingsView
$ ->
console.log 'load app'
# Load default data
thingsCollection = new Things([
new Thing(myValue: 'uno'),
new Thing(myValue: 'dos')
])
data:
thingsCollection: thingsCollection
# Create application, specify default layouts
MyApp = new Backbone.Marionette.Application()
MyApp.addRegions singleRegion: '#content'
# On application init...
MyApp.addInitializer (data) ->
console.log 'Init application...'
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
# Start application
MyApp.start data
我有一个木偶的观点,事物的观点。咖啡
$ ->
console.log 'load model'
class Thing extends Backbone.Model
defaults:
myValue: null
initialize: ->
console.log 'new thing'
window.Thing = Thing
$ ->
console.log 'load collection'
class Things extends Backbone.Collection
model: Thing
window.Things = Things
$ ->
console.log 'load composite model view'
ThingView = Backbone.Marionette.ItemView.extend(
template: '#template-thing'
tagName: 'tr'
)
window.ThingView = ThingView
$ ->
console.log 'load composite collection view'
ThingsView = Backbone.Marionette.CompositeView.extend(
tagName: 'table'
id: 'things'
template: '#template-things'
itemView: ThingView
appendHtml: (collectionView, itemView) ->
collectionView.$('tbody').append itemView.el
)
window.ThingsView = ThingsView
$ ->
console.log 'load app'
# Load default data
thingsCollection = new Things([
new Thing(myValue: 'uno'),
new Thing(myValue: 'dos')
])
data:
thingsCollection: thingsCollection
# Create application, specify default layouts
MyApp = new Backbone.Marionette.Application()
MyApp.addRegions singleRegion: '#content'
# On application init...
MyApp.addInitializer (data) ->
console.log 'Init application...'
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
# Start application
MyApp.start data
我有一个应用程序myapp.coffee
$ ->
console.log 'load model'
class Thing extends Backbone.Model
defaults:
myValue: null
initialize: ->
console.log 'new thing'
window.Thing = Thing
$ ->
console.log 'load collection'
class Things extends Backbone.Collection
model: Thing
window.Things = Things
$ ->
console.log 'load composite model view'
ThingView = Backbone.Marionette.ItemView.extend(
template: '#template-thing'
tagName: 'tr'
)
window.ThingView = ThingView
$ ->
console.log 'load composite collection view'
ThingsView = Backbone.Marionette.CompositeView.extend(
tagName: 'table'
id: 'things'
template: '#template-things'
itemView: ThingView
appendHtml: (collectionView, itemView) ->
collectionView.$('tbody').append itemView.el
)
window.ThingsView = ThingsView
$ ->
console.log 'load app'
# Load default data
thingsCollection = new Things([
new Thing(myValue: 'uno'),
new Thing(myValue: 'dos')
])
data:
thingsCollection: thingsCollection
# Create application, specify default layouts
MyApp = new Backbone.Marionette.Application()
MyApp.addRegions singleRegion: '#content'
# On application init...
MyApp.addInitializer (data) ->
console.log 'Init application...'
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
# Start application
MyApp.start data
我的html文件看起来像:
<div id="content">
<script type="text/template" id="template-things">
<thead>
<tr class='header'>
<th>myValue</th>
</tr>
</thead>
<tbody>
</tbody>
</script>
<script type="text/template" id="template-thing">
<td><%= myValue %></td>
</script>
</div>
所以,不用说,我对正在发生的事情感到困惑-我肯定这里有很多错误,所以请帮助!这个
窗口。Thing
Thing是Coffeescript全球名称空间避免污染的副产品。解决这一问题的惯用方法是
仅在DOM加载时初始化类是一项艰巨的任务。如果为类命名名称空间,则只需确保以正确的顺序加载它们(集合视图之前的项目视图),并且可以立即创建它们,而不是在页面加载之后创建
您能告诉我们发生未捕获类型错误的位置吗
如果我没有声明window.Thing
,下一个文件(Things
的集合)无法找到模型Thing
,等等。我在那里做错了什么
CoffeeScript编译器将每个文件包装在一个自动执行函数中,因此Thing
对于包装器来说是本地的,除非您通过将其放入窗口
强制将其全球化
我认为你真正的问题就在这里:
MyApp.addInitializer (data) ->
console.log 'Init application...'
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
你创建了一个ThingsView
并将其存储在ThingsView
中。然后你尝试传递数据。ThingsView
到MyApp.singleRegion.show
中,但是数据中没有任何内容。ThingsView
所以当木偶中的某个东西试图查看.render()
时,你会收到投诉。我想你想要这个:
thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show thingsView
或者这个:
data.thingsView = new ThingsView(collection: data.thingsCollection)
MyApp.singleRegion.show data.thingsView
取决于这个数据
对象是关于什么的。谢谢-我知道为什么窗口会工作,但不确定为什么主干不只是自动为模型创建一个全局名称空间…我猜它不是这样工作的!看看你的例子,现在很清楚了——我认为对“猫”的引用太多了在这个例子中,我对js2coffee的理解丢失了:)