小编dan*_*ton的帖子

如何从Marionette.js ItemView模板访问Backbone.Model方法?

我正在尝试使用backbone/marionette.js从.eco模板中访问模型的方法.我有一个Expense模型day(),使用一个方法,使用moment.js,返回'13th'; 例如:

class Expense extends Backbone.Model
  day: ->
    moment.get('date').format('Do')
Run Code Online (Sandbox Code Playgroud)

我可以创建一个新的Expense如下,并调用该day()方法:

coffee = new Expense({name: "Coffee", amount: 2.50, date: "2014-01-13T13:50:00Z"})
coffee.day() # 13th
Run Code Online (Sandbox Code Playgroud)

但是,尝试day()从以下视图和模板中进行访问会导致一些问题:

class ExpenseView extends Marionette.ItemView
  template: "views/_expense"
Run Code Online (Sandbox Code Playgroud)
# views/_expense.jst.eco
<h3 class="expense__name"><%= @name %></h3>
<p class="expense__day"><%= @day() %></p>
Run Code Online (Sandbox Code Playgroud)

明白为什么它不工作......在ItemView电话serializeData返回@model.toJSON()......因此,Expenseday()方法是无法访问的.骨干/木偶社区中是否存在既定模式,可以为模板提供模型方法?

到目前为止,我已经完成了以下工作:

class ExpenseView extends Marionette.ItemView
  template: "views/_expense"

  serializeData: ->
    _.extend(@model.toJSON(), model: @model)

  templateHelpers:
    day: ->
      @model.day()
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是解决问题的最佳方法?谢谢!

javascript coffeescript backbone.js marionette

5
推荐指数
1
解决办法
2144
查看次数