在 Ember 中重置具有计算的单向属性的表单
Resetting a form with computed oneWay properties in Ember
我正在为一个嵌入模式的表单建模,我希望当我的路由调用在控制器中显式重置时重置它。这是我在模态中管理的某种形式:
{{#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}}
这是presents/manages表格的控制器:
App.SizeEditorModalController = Ember.ObjectController.extend
width: Ember.computed.oneWay 'model.width'
height: Ember.computed.oneWay 'model.height'
top: Ember.computed.oneWay 'model.top'
left: Ember.computed.oneWay 'model.left'
reset: ->
# I'd like to restore the oneWay properties to its default values coming from the bound model
这是之前涉及控制器的模态复位的路径。
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'
当我为表单控件设置一些值时,它们会永远留在那里,因为我使用的是单向属性并且我不知道是否存在任何重置这些属性以再次从源绑定中获取值的方法.
我不想在单击 'Save' 按钮之前更新模型。
这是一种很常见的情况,我相信 Ember 有一种简单的方法可以实现这一点,但是,目前我看不出这是什么方法。
提前致谢
使用模型的回滚功能。
如果一个模型是脏的,你可以像这样回滚它:
/**
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
(http://emberjs.com/api/classes/Ember.Route.html#method_render) method would behave in this way when passing a model like render
(http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_render) 助手会,但它无关。
不过,我仍然想念我的控制器计算出的单向属性无需创建控制器的新实例即可重置的情况。
我正在为一个嵌入模式的表单建模,我希望当我的路由调用在控制器中显式重置时重置它。这是我在模态中管理的某种形式:
{{#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}}
这是presents/manages表格的控制器:
App.SizeEditorModalController = Ember.ObjectController.extend
width: Ember.computed.oneWay 'model.width'
height: Ember.computed.oneWay 'model.height'
top: Ember.computed.oneWay 'model.top'
left: Ember.computed.oneWay 'model.left'
reset: ->
# I'd like to restore the oneWay properties to its default values coming from the bound model
这是之前涉及控制器的模态复位的路径。
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'
当我为表单控件设置一些值时,它们会永远留在那里,因为我使用的是单向属性并且我不知道是否存在任何重置这些属性以再次从源绑定中获取值的方法. 我不想在单击 'Save' 按钮之前更新模型。 这是一种很常见的情况,我相信 Ember 有一种简单的方法可以实现这一点,但是,目前我看不出这是什么方法。
提前致谢
使用模型的回滚功能。 如果一个模型是脏的,你可以像这样回滚它:
/**
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
(http://emberjs.com/api/classes/Ember.Route.html#method_render) method would behave in this way when passing a model like render
(http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_render) 助手会,但它无关。
不过,我仍然想念我的控制器计算出的单向属性无需创建控制器的新实例即可重置的情况。