【发布时间】:2014-07-25 09:13:49
【问题描述】:
上下文
我有一个小型 Ember 应用程序,除其他外,它会显示许多已连接的用户,并且当悬停页面的元素时,他们的名称会显示为列表。
总而言之,它工作得很好。应用程序每两分钟从 REST 端点提取数据,因为后端不允许推送数据。
工具提示的内容是在控制器中计算出来的,它的功能基本上是根据上下文以各种方式连接字符串。然后它绑定到创建工具提示的<img> 的数据属性。当 View 准备好并触发 didInsertElement 时,将根据此 data-bindattr 值生成(如果需要)工具提示。
问题
当从后端提取新数据时,所有内容都会相应更新,但工具提示内容除外。 (浏览页面的 DOM 时,data-bindattr 的值也会更新。)
什么可能导致工具提示不刷新?是不是JQuery-UI不再计算的情况?
一些代码
刷新应用控制器中的代码:
Monitor.ApplicationController = Ember.ArrayController.extend({
itemController: 'process',
sortProperties: ['name'],
sortAscending: true,
intervalId: undefined,
startRefreshing: function() {
var self = this;
if (self.get('intervalId')) {
return;
}
self.set( 'intervalId', setInterval(function() {
self.store.find('process');
}, 120000 ));
}
});
查看:Process.hbs
<div {{bind-attr class=":inline inactive:inactive"}}>
<img {{bind-attr src=icon}} {{bind-attr data-caption=contentText}} class="caption" />
<div class="counter">{{nbUsers}}</div>
</div>
视图:进程视图
Monitor.ProcessView = Ember.View.extend({
// (...) Various stuff.
didInsertElement: function() {
this.updateTooltip();
},
updateTooltip: function() {
console.log('Inside updateTooltip!');
if (!this.$()) {return;}
if (this.get('controller').get('inactive')) {
this.$().tooltip({items: '.caption', disabled: true});
return;
}
this.$().tooltip({
items: '.caption',
tooltipClass: 'tooltip',
content: function() {
return $(this).data('caption');
},
position: {
my: 'left+15px center',
at: 'right center',
collision: 'flip'
},
show: false,
hide: false
});
}.observes('controller.inactive', 'controller.contentText')
});
控制器:进程控制器
Monitor.ProcessController = Ember.ObjectController.extend({
contentText: function() {
var tooltipContent = '';
this.get('containers').forEach(function(container) {
// Do a lot of things to tooltipContent involving:
// container.get('name')
// container.get('text')
// container.get('size')
// container.get('nbUsers')
// The data-bindattr value refreshes correctly so I cut this out for readability.
return tooltipContent;
}.property('name', 'containers.@each')
});
编辑 1:
将观察者中的“containers.@each”替换为“contentText”并添加日志记录。
【问题讨论】:
标签: jquery-ui ember.js tooltip refresh observer-pattern