1

我的模板中有一个姓名列表

index.handlebars.js.coffee

<ul>
    {{#each income in controller}}
      <li {{action editIncome}}>{{income.name}}</li>
    {{/each}}
</ul>

{{#if isEdited}}
  // I want to edit clicked element here
{{else}}
  {{view EmberMoney.NewIncomeView}}
{{/if}}

收入控制器.js.coffee

EmberMoney.IncomesIndexController = Ember.ArrayController.extend

  isEdited: false

  addIncome: ->
    EmberMoney.Income.createRecord(name: @get('newIncomeName'))
    @get('store').commit()
    @set('newIncomeName', "")

  editIncome: ->
    this.set('isEdited', true)

router.js.coffee

EmberMoney.Router.reopen
  location: 'history'

EmberMoney.Router.map ->
  @resource 'incomes', ->

EmberMoney.IncomesIndexRoute = Ember.Route.extend
  model: -> 
    EmberMoney.Income.find()

单击每个名称时,我不想在此页面上呈现编辑模板。因此,如果我单击列表下的名称“Kate”,它将生成一个编辑此记录的模板。

我不明白该怎么做。感谢帮助。

UPD:我的问题是我不明白如何在我想编辑元素的地方知道编辑的对象 ID

4

1 回答 1

1

尝试在您的路线中处理您的状态。

EmberMoney.Router.map ->
  @resource 'incomes', ->
    @route 'index' # this route is used for creating new records
    @route 'edit', { path: '/:income_id/edit' } # this route is used to edit a record

EmberMoney.IncomesRoute = Ember.Route.extend
  model: -> 
    EmberMoney.Income.find()

EmberMoney.IncomesEditRoute = Ember.Route.extend

  setupController: (controller, model) ->
    if model.get('transaction') == @get('store').get('defaultTransaction')
      transaction = @get('store').transaction()
      transaction.add model
    controller.set('content', model)

  deactivate: ->
    @modelFor('incomes.edit').get('transaction').rollback()

  events: 
    submit: (record) ->
      record.one 'didUpdateRecord', =>
        @transitionTo 'index'
      record.get('transaction').commit()

现在将您的模板放入incomes.handlebars, 而不是index

<ul>
    {{#each income in controller}}
      <li>{{#linkTo "incomes.edit" income}} {{income.name}} {{/linkTo}}</li>
    {{/each}}
</ul>
{{outlet}}

然后在incomes/index

{{view EmberMoney.NewIncomeView}}

并在incomes/edit

<form {{action submit content on="submit"}}>
  {{view Ember.TextField valueBinding=name}}
</form>

这里的优势是现在您已将状态存储在路线中。此外,您可以控制每个路线/状态内的事件。

我没有包含IncomesIndexRoute应该管理创建新记录的逻辑。edit但我想你可以遵循与路线类似的逻辑。

IncomesIndexController最后,如果您设法处理路线中的所有内容,您应该能够删除。

于 2013-03-19T10:42:20.893 回答