强制重新呈现自定义文本视图

时间:2015-01-16 23:03:30

标签: ember.js

如何强制重新呈现自定义文本字段视图?

我创建了一个:

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>

任何指针都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我是Ember的新手,我的回答可能不合适,但根据我的实验,问题是Ember尽可能地缓存。因此,它不会使用select2完全重新渲染视图,只有当视图处于某个状态时,前一个状态后跟下一个状态才会自动重新渲染。

至少现在的解决方案似乎是添加&#34; valueChange&#34;方法观察者&#34;值&#34;更改select2自定义TextField并进行与&#34; didInsertElement&#34;中相同的调用(在渲染视图时执行):

valueChange: function() {
    Ember.run.scheduleOnce('afterRender', this, 'setupSelect2');
}.observes('value'),

现在即使我在&#34;编辑&#34;状态,它也将更新此select2,而不仅仅是与模型相关的标准表单输入。我现在可以导航到&#34;编辑&#34;对于所选的每个项目都打开的状态,并且值在select2中相应地更改。