我有像这样的HAML模板
%body
:javascript
(function() {
.....
this.App = new Ex({
currentUser: #{current_user.to_json},
recentFolders: #{{"next_page"=>2,"folders"=>@recent_folders.as_json}.to_json},
rootUrl: "#{root_url}",
env: "#{Rails.env}"
});
$(this.App.start);
}).call(this);
和骨干视图
class FoldersView extends Marionette.CompositeView
template: JST['views/dashboard/folders']
className: 'h-folders'
itemView: FoldersItemView
itemViewContainer: '.b-folders'
ui:
more: '.b-more'
events:
'click .more' : 'showMoreFolders'
showMoreFolders: ->
@collection.fetchNext()
@ui.more.prop('hidden', 'hidden') if @collection.isLastPage
骨干模型
class Folders.Collection extends Backbone.Collection
model: Folders.Model
url: "/api/folders"
initialize: (models) ->
console.log models
parse: (response) ->
@nextPage = response.meta['next_page']
response.folders
fetchNext: ->
@fetch add:true, data: {page: @nextPage}, success: => @_success
isLastPage: ->
unless @nextPage
true
_success: ->
@trigger('fetch')
module.exports = Folders
分页问题。当点击链接“看到更多”(showMoreFolders方法)时,它从服务器通过分页(如果页面= 2获取秒页面等)获取集合并在视图中显示。当第一次使用内联JS代码呈现HAML时,fetchNext方法的params [:page]为@ undefined @。
当使用内联JS进行rtendered HAML时,如何首次包含next_page?
谢谢!
答案 0 :(得分:0)
只有在获取和保存方法执行后才会调用Model.parse。在初始加载时,这些都不会被调用,因此Model.parse永远不会运行。您需要将@nextPage属性初始化为模型定义中的某些内容,或者想出一种将该数据引导到模型中的方法。在模型中初始化它肯定更容易,并使模块特定数据与应用程序的其余部分隔离。
initialize: (models) ->
@setNextPage(2)
parse: (response) ->
@setNextPage(response.meta['next_page'])
setNextPage: (page) ->
@nextPage = page