Ember Data 1.0 - 如何在数据加载时触发模型上的观察器
Ember Data 1.0 - How to trigger observer on model when data loads?
我正在构建的Ember应用程序使用Leaflet.js作为其大地图。我有一个模型的观察者,该模型将向量添加到地图并保持更新:
Qp.Region = DS.Model.extend({
// Attributes
name: DS.attr('string'),
maxLat: DS.attr('number'),
minLat: DS.attr('number'),
minLon: DS.attr('number'),
maxLon: DS.attr('number'),
// Helper properties
_vector: null,
// Computed properties
leafletBounds: function() {
var properties = ['minLat', 'maxLat', 'minLon', 'maxLon'],
bounds = [];
for ( var i = 0; i < 2; i++ ) {
var lat = Number(this.get(properties[i])),
lng = Number(this.get(properties[i + 2]));
if ( lat !== lat || lng !== lng )
return;
bounds.pushObject(L.latLng({
lat: lat,
lng: lng
}));
}
return bounds;
}.property('minLat', 'maxLat', 'minLon', 'maxLon'),
boundsDidChange: function() {
var existingVector = this.get('_vector'),
vector = existingVector || Ember.Object.create({
_layer: null,
model: this
}),
bounds = this.get('leafletBounds');
if ( !bounds )
return;
vector.set('bounds', bounds);
if ( !existingVector ) {
Qp.L.regions.pushObject(vector);
this.set('_vector', vector);
}
}.observes('leafletBounds'),
shouldRemoveSelf: function() {
if ( !this.get('isDeleted') && !this.get('isDestroying') )
return;
var existingVector = this.get('_vector');
if ( existingVector ) {
Qp.L.regions.removeObject(existingVector);
this.set('_vector', null);
}
}.observes('isDeleted', 'isDestroying')
})
注:注:这在 Ember Data 修订版 0.13 中完美配合。
现在我正在更新到 Ember Data 1.0 beta 2,并且矢量不再添加到地图中。如果我在初始化时保存对模型的引用...
init: function() {
this._super.apply(this, arguments);
window.test = this;
}
。,然后从 Chrome 开发者工具控制台调用window.test.boundsDidChange()
,此时将显示我的灯具中最后一个区域的矢量。因此,我知道一切仍在工作,除了在模型数据加载时不再调用观察器。
如何让boundsDidChange
观察器在模型加载或更新时触发?
这可能是由于 rc8 的变化。 查找标题为"未使用的计算属性不触发观察器"的部分: http://emberjs.com/blog/2013/08/29/ember-1-0-rc8.html
更改是计算属性在被某些东西实际检索之前永远不会计算,这意味着如果它们不直接显示,则它们的观察者将无法可靠地工作。
可以在对象 init 中get
leafletBounds
属性,也可以让 boundsDidChange
函数观察计算属性的所有组件。
boundsDidChange: function() { 方法主体中没有任何更改
}.observes('minLat', 'maxLat', 'minLon', 'maxLon')
相关文章:
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 如何观察在 Sails .js 中添加到模型中的新记录
- 挖空映射:加载数据后,父模型中的计算可观察量不会更新
- 知道可观察的在根模型中的位置,在 foreach/后代绑定中被淘汰
- 一个控制器如何在 Ember .js 中观察任意控制器/模型上的事件
- Ember.js:一个模型如何观察其他模型
- 当可观察数组是其他模型的属性时,挖空不会更新 UI
- KnockoutJs 更新视图模型可从 Json Web 服务中观察到
- 动态观察控件.js导致模型在单击旋转时消失
- 挖空嵌套模型可观察数组未定义
- 可由其他视图模型访问的挖空可观察/视图模型
- Ember Data 1.0 - 如何在数据加载时触发模型上的观察器
- 如何使用可观察模型创建数据源
- Knockoutjs:如何将单个项目从可观察数组传递到我的视图模型中
- 用于修改从子视图模型在父视图上可观察到的删除的模式
- 更改knockoutjs模型的可观察值
- Angularjs-我们如何观察ngRepeat中的动态元素,以及动态ng模型名称和ANY更改时的过滤元素值
- 淘汰-更新可观察的模型
- 从另一个视图模型观察KO可观察对象
- 在对象中创建根模型可观察数组的克隆