【问题标题】:Rerender view after change route's dynamic segment更改路线的动态段后重新渲染视图
【发布时间】:2014-09-23 19:15:53
【问题描述】:

我有一条带有动态段 :id 的路线。当我在浏览器 url 输入字段中仅手动更改动态分段部分时,然后进行转换,并且所有模型挂钩都按预期调用。

问题是:没有一个视图被重新渲染。我想这是因为只有模型改变了 - 而不是 UI。但是我在视图的 didInsertElement 处理程序中有一些 UI 逻辑 - 重新初始化 UI 插件等等。

动态段改变后如何强制ember重新渲染视图?

【问题讨论】:

  • 我的第一个想法是:您真的希望重新渲染整个视图,还是只想让视图反映模型中的更新? Ember 默认设置为具有双向绑定,但有时可以编写删除双向绑定的代码。在没有看到您的代码或 JSBin 的情况下,很难知道您的问题是什么,但是,一般来说,您会希望确保视图和子视图之间的双向绑定完好无损。一种测试方法是添加一个访问相同模型属性的{{input}} 助手,直接输入它,然后查看您的父视图是否更新。

标签: ember.js


【解决方案1】:

我同意乔希的评论。如果您使用动态段的更改重新渲染视图,则意味着您的代码编写不正确。但如果你想那样做,我会给出一部分代码。

在您的路线中:

model: function(params){
   model.set('id', params.id);
}

在您看来需要重新渲染:

_modelIdChange: function(){
  this.rerender();
}.observes('controller.model.id')

但我不建议这样做。我宁愿选择适当的绑定。但我确实在某些情况下使用了重新渲染,主要是在您最终使用 jquery 插件时。

【讨论】:

  • 这里正是使用 jQuery 插件的情况。我有一个带有很多不同输入的编辑表单——日期选择器、选择视图等等,我使用 jquery 插件。问题是 - 当我更改模型的 id 时 - 新模型被加载,并且输入的值被更新,但是如果例如我之前打开了一个日期选择器 - 它在模型更改后仍然打开,并保留用户的输入 - 这是错误的,我希望它焕然一新。而且,为所有嵌套视图复制粘贴 modelIdChange 处理程序似乎也不是一个好主意。
  • 实际上你的建议对我有用。我创建了一个支持我的路线的视图并添加了 modelIdChanged 处理程序。因此,当模型 id 更改时,将重新渲染具有所有嵌套组件视图的整个视图。谢谢!
猜你喜欢
  • 2014-03-14
  • 2017-12-23
  • 2021-12-18
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2018-10-19
  • 2018-04-20
  • 2018-10-15
相关资源
最近更新 更多