【问题标题】:Can someone explain to me why this emberjs observeable doesn't get fired?有人可以向我解释为什么这个 ember js observable 没有被解雇吗?
【发布时间】:2015-02-21 04:21:12
【问题描述】:

每当我保存数据 ( self.get('content').pushObject(record);) 并将记录推回内容数组时,observable 都不会被触发。我需要触发 observable,以便再次对内容数组进行排序。你能解释一下为什么它没有触发吗?

saveIdea.IndexController = Ember.ArrayController.extend({ appName: '我的第一个例子', todaysDayOfMonth: moment().format('DD'), todaysMonth: moment().format('MMMM'), 身体: '', 标记:'', 内容:Em.A(), 排序内容:函数() { var idea = this.get('content').toArray(); 想法.sort(函数(a,b){ if (moment(b.get('date')).isBefore(moment(a.get('date')))) { 返回 -1 } 别的 { 返回 1 } }); this.set('内容',想法) }, 今天的想法:函数(){ this.sortContent(); }.observes('content.[]'), 行动:{ 保存:函数(){ 变种自我=这个; var idea = this.store.createRecord('idea', { 正文:this.get('body'), 标签:this.get('taggy') }); idea.save().then(function(record) { self.get('content').pushObject(record); }); } } });

【问题讨论】:

  • 这里我只使用插入排序,它比每次都使用内容要便宜。
  • 这看起来也像死循环,是不是报错了?
  • 并且 Em.A() 返回一个指向集合的指针,该集合将存在于类中,因此它将在该集合的所有实例之间共享.. 至少在最初
  • 而且您不应该真正使用“已弃用”的content,您应该始终使用模型。 emberjs.jsbin.com/bafoqodoyu/1/edit?html,js,output

标签: ember.js


【解决方案1】:

因为你不能使用数组。

这个 mixin 实现了观察者友好的类似数组的行为。它不是一个具体的实现,但它可以被其他想要看起来像数组的类用完。

http://emberjs.com/api/classes/Ember.Array.html

使用具体的实现,例如Ember.ArrayProxy

http://emberjs.com/api/classes/Ember.ArrayProxy.html

【讨论】:

  • 请注意,当使用 ember 时,任何 javascript 数组都将获得对 Ember.Array 方法的访问权限: [ 默认情况下,Ember.js 将通过以下方式扩展原生 JavaScript 对象的原型: 扩展数组以实现Ember.Enumerable、Ember.MutableEnumerable、Ember.MutableArray 和 Ember.Array 接口。 ] __ 所以你可以用 [] 替换你的content : Em.A() ...
  • 您可以在数组控制器中很好地使用数组,数组控制器已经扩展了数组代理,这就是它将项目代理到模型而不是自身的方式
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2010-12-17
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多