Javascript 主干:渲染嵌套视图
我第一次使用主干网,我正在尝试解决如何在视图中渲染视图。我的父视图完美地显示在页面上,我似乎无法在Javascript 主干:渲染嵌套视图,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,我第一次使用主干网,我正在尝试解决如何在视图中渲染视图。我的父视图完美地显示在页面上,我似乎无法在中呈现嵌套视图 我的父视图如下所示: 查看/项目发布项目。咖啡 define ['jquery', 'underscore', 'backbone', 'templates', 'views/shared/project_post_item'], ($, _, Backbone, JST, ProjectPostItemView) -> class ProjectPostItemsView
中呈现嵌套视图
我的父视图如下所示:
查看/项目发布项目。咖啡
define ['jquery', 'underscore', 'backbone', 'templates', 'views/shared/project_post_item'],
($, _, Backbone, JST, ProjectPostItemView) ->
class ProjectPostItemsView extends Backbone.View
template: JST['app/scripts/templates/charity/project_post_items.ejs']
posts_item_views: []
initialize: ->
super()
@listenTo @model, 'change', @render
if @model.dirty()
@model.fetch()
else
@render()
@listenTo(@collection, 'add', @displayPostItem)
@collection.reset().fetch(add: true)
displayPostItem: (project) ->
view = new ProjectPostItemView(model: project)
@posts_item_views.push( view.on('render', =>
@$('#activity-feed').append(view.$('>'))) )
render: (options) ->
super(options)
define ['jquery', 'underscore', 'backbone', 'templates', 'models/project_post_item'],
($, _, Backbone, JST, ProjectPostItemModel) ->
class ProjectPostItemView extends Backbone.View
template: JST['app/scripts/templates/shared/project_post_item.ejs']
initialize: (options) ->
@main_view = options.main_view
super()
console.log "hello"
@render
render: =>
super({}, 'html')
injectPageView: (sub_view, options={}) ->
# clean and switch
@current_page_view?.remove()
# set up the new one
@current_page_view = new sub_view(_.defaults(options, el: @$page_container, main_view: @))
@side_menu_view.activate_item(_.result(@current_page_view, 'item_menu'))
@listenTo(@current_page_view, 'url:fragment', (fragment) => @router.navigate("home/#{fragment}", trigger: false))
@
posts: (project_id) ->
@main_view.injectPageView( ProjectPostItemsView, model: @data.charity, collection: @data.charity.getProjectPostItems(project_id) )
我正在将我的帖子项目添加到我的收藏中,然后使用我的displayPostItem()
函数创建一个新的ProjectPostItemView
视图,并将这些项目推到我的posts\u item\u view
数组中。最后,我将项目附加到id为#activity feed
的元素
这是它链接到的模板:
模板/project\u post\u items.ejs
<h2>Latest Updates</h2>
<div id="activity-feed"></div>
<h1>Hello from the nested view</h1>
其模板如下所示:
模板/project\u post\u item.ejs
<h2>Latest Updates</h2>
<div id="activity-feed"></div>
<h1>Hello from the nested view</h1>
慈善事业•咖啡
define ['jquery', 'underscore', 'backbone', 'templates', 'views/shared/project_post_item'],
($, _, Backbone, JST, ProjectPostItemView) ->
class ProjectPostItemsView extends Backbone.View
template: JST['app/scripts/templates/charity/project_post_items.ejs']
posts_item_views: []
initialize: ->
super()
@listenTo @model, 'change', @render
if @model.dirty()
@model.fetch()
else
@render()
@listenTo(@collection, 'add', @displayPostItem)
@collection.reset().fetch(add: true)
displayPostItem: (project) ->
view = new ProjectPostItemView(model: project)
@posts_item_views.push( view.on('render', =>
@$('#activity-feed').append(view.$('>'))) )
render: (options) ->
super(options)
define ['jquery', 'underscore', 'backbone', 'templates', 'models/project_post_item'],
($, _, Backbone, JST, ProjectPostItemModel) ->
class ProjectPostItemView extends Backbone.View
template: JST['app/scripts/templates/shared/project_post_item.ejs']
initialize: (options) ->
@main_view = options.main_view
super()
console.log "hello"
@render
render: =>
super({}, 'html')
injectPageView: (sub_view, options={}) ->
# clean and switch
@current_page_view?.remove()
# set up the new one
@current_page_view = new sub_view(_.defaults(options, el: @$page_container, main_view: @))
@side_menu_view.activate_item(_.result(@current_page_view, 'item_menu'))
@listenTo(@current_page_view, 'url:fragment', (fragment) => @router.navigate("home/#{fragment}", trigger: false))
@
posts: (project_id) ->
@main_view.injectPageView( ProjectPostItemsView, model: @data.charity, collection: @data.charity.getProjectPostItems(project_id) )
我不确定,但首先,在我看来,您在第一次
define
通话中遇到了问题。看起来ProjectView
不属于该视图。您希望如何呈现子视图?这是一个输入错误。删除了原始代码,因此出现了错误。修复了输入错误@Amit@muistooshort抱歉,你能详细解释一下吗?