我怎样才能改变骨干的初始化集合?

时间:2013-12-26 17:50:33

标签: ruby-on-rails-3 marionette backbone-views

我有像这样的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?

谢谢!

1 个答案:

答案 0 :(得分:0)

只有在获取和保存方法执行后才会调用Model.parse。在初始加载时,这些都不会被调用,因此Model.parse永远不会运行。您需要将@nextPage属性初始化为模型定义中的某些内容,或者想出一种将该数据引导到模型中的方法。在模型中初始化它肯定更容易,并使模块特定数据与应用程序的其余部分隔离。

initialize: (models) ->
  @setNextPage(2)

parse: (response) ->
  @setNextPage(response.meta['next_page'])

setNextPage: (page) ->
  @nextPage = page