Javascript 在Ember中重置具有计算单向属性的窗体
我正在建模一个嵌入在模态中的表单,我希望在我的路由在控制器中显式调用reset时重置它。这就是我在模态中管理的表单:Javascript 在Ember中重置具有计算单向属性的窗体,javascript,forms,ember.js,binding,Javascript,Forms,Ember.js,Binding,我正在建模一个嵌入在模态中的表单,我希望在我的路由在控制器中显式调用reset时重置它。这就是我在模态中管理的表单: {{#modal-window title='Size management' close='removeModal'}} <label> <span>Size</span> {{input value=width class='width'}} <span>X</span> {{in
{{#modal-window title='Size management' close='removeModal'}}
<label>
<span>Size</span>
{{input value=width class='width'}}
<span>X</span>
{{input value=height class='height'}}
</label>
<label>
<span>Left</span>
{{input value=left class='left'}}
</label>
<label>
<span>Top</span>
{{input value=top class='top'}}
</label>
{{/modal-window}}
这是显示控制器之前模式重置的路线
App.ApplicationRoute = Ember.Route.extend
actions:
showModal: (name, model)->
controller = @controllerFor name
controller.reset()
@render name,
into: 'application'
outlet: 'modal'
model: model
removeModal: ->
@disconnectOutlet
outlet: 'modal'
parentView: 'application'
当我为表单控件设置一些值时,它们将永远留在那里,因为我使用的是单向属性,我不知道是否存在重置这些属性以再次从源绑定获取值的方法。
我不希望在单击“保存”按钮之前更新模型。
这是一个相当普遍的情况,我相信余烬有一个简单的方法来实现这一点,但目前我看不出这是什么方式
提前感谢使用模型的回滚功能。 如果模型脏了,可以按如下方式回滚:
/**
If the model `isDirty` this function will discard any unsaved
changes
Example
```javascript
record.get('name'); // 'Untitled Document'
record.set('name', 'Doc 1');
record.get('name'); // 'Doc 1'
record.rollback();
record.get('name'); // 'Untitled Document'
```
@method rollback
*/
所有未保存的更改都将消失。这就成功了
App.register 'controller:size-editor-modal', App.SizeEditorModalController, { singleton: false }
如果我添加了这个,我的控制器就不再是单例的,然后每次模态需要时都会创建一个新实例。然后,控制器使用计算出的属性及其来自模型的默认值。
我假设render
()方法在传递像render
()这样的模型时会以这种方式运行,但它与此无关。
我仍然不想看到这样的情况:我希望我的控制器计算出的单向属性被重置,而不需要创建控制器的新实例。我没有使用余烬数据。我必须实现类似的东西。不管怎样,如果我移动到应用程序中的另一个地方怎么办?如果我不显式地调用rollback,这些更改将保持不变。即使是最糟糕的情况,observes也会在其他地方执行其逻辑,即使它们不是决定性的更改。一个好的替代方法是使用组件而不是控制器。这也将简化到Ember 2.0的过渡
App.register 'controller:size-editor-modal', App.SizeEditorModalController, { singleton: false }