2

目前在 Ember.js 1.0.0.rc6.4

我有一个新活动的视图,它呈现一个文本区域 ( description) 和一个复选框 ( isQuestion)。如果?在描述中插入 a,则复选框会自动选中。在用户单击复选框之前效果很好,此时 binging 会丢失,这很好,但是一旦提交表单,我需要重新分配它。这是一些代码,我希望它是干净的,并感谢您的关注。对不起,如果我洒了一些咖啡。

App.ActivityFormView = Em.View.extend
  actionName:   'submit'

  reset: ->
    @set('description', '')
    @set('duration', '')
    @set('checkIsQuestion', false)

  submit: ->
    activities = @get('controller.model')
    activities.createRecord(description: @get('description'), isQuestion: @get('checkIsQuestion'))
    @reset()

  checkIsQuestion: (->
    @get('description')? && @get('description').match(/\?/)?
  ).property('description')

这是模板

<label>
  Add your activity here:
  {{textarea value=view.description}}
</label>
<label>
  Mark as question:
  {{input checked=view.checkIsQuestion type='checkbox'}}
</label>
<button type='submit'>Save</button>

我尝试在reset方法中使用绑定,但我认为我需要在单独的函数中提取匹配逻辑并使用属性或绑定重新分配它,但我不知道如何。

欢迎任何帮助,请随时对整体解决方案发表评论。谢谢

4

1 回答 1

2

我想如果绑定和计算属性保持不变,你应该区分你的计算属性,如果它得到setget行为不同,将你的代码修改为:

...
checkIsQuestion: function(key, value) {
  // getter
  if (arguments.length === 1) {
    return (this.get('description') != null) && (this.get('description').match(/\?/) != null);
  // setter
  } else {
    return value;
  }
}.property('description')
...

这样做,绑定应该保持不变。另请参阅此处以获取示例jsbin。我希望它具有您正在寻找的正确行为。对不起“javascriptified代码”:)

希望能帮助到你。

于 2013-08-05T09:41:17.413 回答