【发布时间】:2015-01-16 23:03:29
【问题描述】:
如何强制重新渲染自定义文本字段视图?
我创建一个:
App.Select2View = Ember.TextField.extend({didInsertElement:function() {//plugin called here}});
它包含在模板表单中,当表单打开并且我选择另一个/不同的项目时,此自定义文本字段视图(基于选择 2)不会重新呈现但保持不变。
我有嵌套的路线/资源。公司下属公司。当我选择一家公司时,我有只读信息和编辑按钮,如果单击该按钮,可以将公司控制器上的操作调用到“isEditing”状态,在这种状态下,一个表单是打开的。如果我将状态更改为 false,它将返回只读模式(查看公司信息)。
如果我先把它设置回只读模式,然后再打开另一个项目,select2就会用这个公司的数据呈现。
但是如果它处于 isEditing 状态,表单打开并且我导航到另一个公司项目,所有表单输入字段都会根据模型更改(例如名称会更改,因为它绑定到公司模型的名称键值),但是select2 和之前的一样。
我不确定如何在 Ember 中重新渲染它。
这在主要公司模板视图下的模板中定义为部分:
<script type="text/x-handlebars" id="company/_edit">
<p>{{input type="text" value=name}}</p>
<p>
{{view "select2"
prompt="Search for companies"
resource="results"
displayKey="text"
onSelect="addCompany"
onDeSelect="removeCompany"
}}
</p>
</script>
感谢任何指针。
【问题讨论】:
-
你能创建一个失败的 bin 吗?人们会回答你的问题。 emberjs.jsbin.com
-
当然,但这将不得不暂停,因为我遇到了其他问题,这可能也是问题的一部分。如果我清除它,我将发布一个 jsbin。基本上我的问题是当我单击处于“编辑”状态的另一个项目时,表单会呈现该项目并填充数据,但 select2 不会重新呈现。我临时解决的方法是在CompanyRoute上添加一个“beforeModel”方法,并执行:this.controllerFor('company').send('cancel'),取消编辑状态:this.set('isEditing ', 真的);用于 CompanyController 上的操作哈希中的取消。
-
然后当我点击编辑按钮时,它会渲染表单视图,同时渲染 select2。
-
问题在于,当它处于“编辑”状态时,我单击另一个项目,select2 将与单击的第一个项目保持相同。
-
也适用于我在 CompanyRoute 上使用的“willTransition”事件:this.controller.send('cancel');,但这又使它脱离了编辑状态,我想保留它编辑状态并导航到使用 select2 为该项目正确呈现的任何项目。很奇怪。
标签: ember.js