我的视图中有一个树查看器,它从标准的Ecore编辑器中监听EMF模型,并用它做进一步的事情。我已经注册了一个选择监听器,它检查所选元素是否是树查看器需要作为输入的类型。因此,问题是,如果模型中有任何变化(例如,向现有元素添加新元素或新信息等),树查看器仅在用户更改选择时才显示更改后的模型,即单击任何模型元素等。
但是我需要做的是,如果底层模型发生变化,树查看器将直接得到通知,并显示新的模型元素,而不必单击模型来监听它。
我找到了下面的eclipse角文章(https://www.eclipse.org/articles/article-treeviewer/treeviewerarticle.htm#inputChanged),从“response th change”中可以看出,inputChanged()和refresh()方法可能是我正在寻找的解决方案,不是吗?
不过,我想知道是否有一种更简单的方法来做到这一点,而不必改变模型代码,但只需改变UI代码?谢了!
您可以调用TreeViewer
refresh()
方法来刷新模型中的整个树,或者调用refresh(Object)
来刷新从给定模型对象开始的树。
如果树结构没有改变,可以调用
update(Object)
来更新单个对象的显示。
还有
add
和remove
方法,用于在模型树中添加和移除对象。
有些方法还有
object[]
变体,因此可以同时修改多个对象。
更新:
您的模型应该支持生成内容提供者可以监听的模型更改事件。您可以在content provider
InputChanged
方法中设置此侦听器,并在Dispose
方法中删除它。当收到模型更改事件时,使用各种TreeViewer
方法更新树。
class TaskListContentProvider
implements IStructuredContentProvider, IResourceChangeListener
{
private TableViewer viewer;
private IResource input;
... other methods ....
public void dispose() {
if (input != null) {
input.getWorkspace().removeResourceChangeListener(this);
input = null;
}
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (input != null) {
input.getWorkspace().removeResourceChangeListener(this);
}
input = (IResource) newInput;
if (input != null) {
input.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
}
viewer = (TableViewer) viewer;
}
public void resourceChanged(IResourceChangeEvent event) {
... use resource change event to update viewer
}
}
问题内容: 我正在尝试使用包含Latex样式方程式的AngularJS双向绑定文本。我想调用MathJax格式化方程式,但是我不确定在AngularJS完成更改模型后确保调用MathJax的最佳方法。我想我需要回调。这是我的JavaScript: } 这是我的HTML: 小提琴在这里:http : //jsfiddle.net/LukasHalim/UVjTD/1/。您会注意到,即使您单击两次更新
问题内容: 我正在尝试编写一些搜索输入,以使用ngResource从数据库中获取数据。 数据在页面上显示为ng-repeat,但是当我执行搜索并且$ scope已更新时,该视图未更新并显示旧数据。 这是代码: main.html(活动视图) main.js searchbar.js 当它启动时,它从数据库中获取所有数据并正确显示它们,当我尝试进行搜索时,$ scope.eventi会更新(我可以从
问题内容: 我正在尝试使用bootstrapscollspy突出显示由角度中继器生成的列表项。 我遇到的问题是,我在Angle将模型更改应用到视图之前,正在从angular控制器刷新scrollspy插件。 确保DOM本身已更新(不仅仅是角度模型)之后,确保scrollspy(’refresh’)调用发生的角度方法是什么? 模板: 控制器: 问题答案: 我如何使用Blesh的答案解决此问题 模板:
问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。
我使用的是一个由渲染器对象的ObservableList支持的TableView,其设置如下: 渲染器对象非常简单,如下所示: 我有一个从UI调用的函数,通过按下按钮并包含以下内容: 我原本希望每3秒钟在每一行上看到一次对approved的更改,但它会执行所有行,并且只有在这之后才会更新UI。为什么会这样?如何更新UI?
我尝试重新验证()和重新绘制(),但没有改变。 现在有趣的事情来了。如果我用for(int I=0;I 只有当我用另一个我手动填写的列表创建和设置新模型时,我才能查看更新。