ember-data 观察记录数组 isLoading/isUpdating/hasUpdated?

2024-03-09

我正在尝试按周显示日历事件列表。更重要的是我正在尝试重用 DS.Store 中已有的数据。这是执行此操作的代码,并且在大多数情况下它都有效。

问题是我的eventsChanged观察者运行的次数太多了。当路由器从服务器获取事件时eventsChanged观察者为每条记录触发。我明白为什么会发生这种情况。我不明白的是为什么没有办法检查 recordArray 是否已完成加载一批记录。

有人有什么建议吗?

App.CalendarWeekRoute = Ember.Route.extend
  model: (params) ->
    Ember.Object.create
      date:  params.date
      login: params.login

  serialize: (model) ->
    date:  model.get 'date'
    login: model.get 'login'

  setupController: (controller, model) ->

    App.Event.find
      login: model.get 'login'
      week:  model.get 'date'

    events    = App.Event.all()
    days      = App.DaysOfWeekFor( model.get('date') ) #returns array of dates

    controller.setProperties
      content: days
      events:  events


App.CalendarWeekController = Em.ArrayController.extend
  itemController: 'calendarDay'
  events: null

  eventsChanged: ( ->

    #don't run if more records are scheduled to be loaded 
    #return if @get 'events.isUpdating'

    days     = @get 'content'
    children = @get '_subControllers'
    events   = @get 'events'
    user     = @get 'user'

    return unless days and children and events and user

    days.forEach (date) ->
      controller = children.findProperty 'content', date
      content = events.filter (event) ->
        (event.get('date') is date) and
        (event.get('user') is user)
      if content
        controller.set 'content', content

  ).observes('content', 'events.@each')

编辑这是我当前的黑客。使用非官方 Ember.debounce https://gist.github.com/tchak/3529810

  eventsChanged: ( ->

    days     = @get 'content'
    children = @get '_subControllers'
    events   = @get 'events'
    user     = @get 'user'

    return unless days and children and events and user

    days.forEach (date) ->
      controller = children.findProperty 'content', date
      content = events.filter (event) ->
        (event.get('date') is date) and
        (event.get('user') is user)
      if content
        controller.set 'content', content

    ).observes('content',  'didUpdate')

    notifyEventsChanged: Ember.debounce(
      @
      (_this) ->
        _this.notifyPropertyChange('didUpdate')
      200
      false
   ).observes('events.@each')

好吧,我有一个很好的解决方案。

  1. use query代替find.
  2. 绑定一个监听器didLoadrecordArray 的属性并切换属性isUpdating在控制器上
  3. 观察控制器content and events属性分开。

App.CalendarWeekRoute = Ember.Route.extend
  setupController: (controller, model) ->
    login     = model.get 'login'
    week      = model.get 'week'
    events    = App.Event.all()
    newEvents = App.Event.query({login: login, week: week}, events)
    controller.setProperties
      isUpdating: true
      content: days
      events:  events
    newEvents.on 'didLoad', -> controller.set('isUpdating', false)

App.CalendarWeekController = Em.ArrayController.extend
  itemController: 'calendarDay'

  content: ( ->
    @update()
  ).observes('content')      

  eventsChanged: ( ->
    @update() unless @get 'isUpdating'
  ).observes('events.@each', 'isUpdating')

  update: ->
    days     = @get 'content'
    children = @get '_subControllers'
    events   = @get 'events'
    user     = @get 'user'
    days.forEach (date) ->
      controller = children.findProperty 'content', date
      content = events.filter (event) ->
        (event.get('date') is date) and
        (event.get('user') is user)
      controller.set 'content', content
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ember-data 观察记录数组 isLoading/isUpdating/hasUpdated? 的相关文章

  • Ember 路由、控制器、视图

    我已阅读 Ember js 网站上的大部分初学者指南 但我仍然对放置内容的正确位置感到困惑 Route 根据在线研究 人们建议将与路由相关的逻辑放入路由中 一切都很好 但我唯一能想到的是this transisionTo 我在其他地方读到所
  • 在 ember 数据中,在 forEach 循环中调用 destroyRecord 会破坏循环吗?

    我正在为我的一个项目开发一个简单的标签模型 我已经在 Angular 中实现了类似的东西 但我想在 Ember 中尝试一下 型号代码如下 Tag DS Model extend name DS attr string user DS bel
  • Ember:断言失败:EmberObject.create 不再支持定义计算属性

    我使用的是 Ember 2 16 版本 我们升级到了 3 8 版本升级后 我看到此错误 但无法弄清楚错误来自何处 在什么情况下我会收到此错误 我看到其中一篇帖子 Ember JS 中的动态计算属性已弃用 https stackoverflo
  • Ember.js - 根据对象属性更新 CSS 宽度

    正如中提到的 安多罗夫的回答 https stackoverflow com a 32593118 565877 OP的理想代码 div style width 1 现在从 Ember 1 10 开始几乎可以正常工作 我是 Ember js
  • Ember 组件在路由或控制器中调用操作

    我有一个组件 其主要目的是显示一行项目 每行都有一个删除按钮 可以删除一行 如何将操作从模板传递到将在路由器中触发操作的组件 这是使用该组件的模板 templates holiday hours hbs each model as holi
  • 特定模型的自定义 REST url

    Ember 有没有办法为特定模型配置自定义 REST url 就像这个模型一样 App Post DS Model extend title DS attr string comments DS hasMany App Comment Ap
  • 您在一次渲染中修改了 *** 两次

    升级到 1 13 后 出现此异常 但我不知道问题出在哪里 我也找不到任何有用的资源来解决我的问题 我在另一个计算属性中设置的属性会发生这种情况 但这个属性肯定只被调用一次 我创建了一个 jsbin 示例 http emberjs jsbin
  • Ember 模型中的自定义请求 url

    我正在尝试将 Ember 数据与已构建的 REST api 一起使用 它适用于顶级路由 例如我在 api 端有课程路由 如下所示 app get courses app controllers courses findAll app get
  • 在 Codeigniter 中使用/嵌入 Ember js

    我即将开始开发一个 Web 应用程序 使用 Ember js 作为前端技术 使用 Codeigniter 作为后端 我遇到的问题是如何在 codeigniter 中嵌入或使用 ember js 可以通过 Web 服务从 codeignite
  • emberjs 对一条路线使用多个路径/url

    在 Ember 中我可以使用这个 App Router map function this route accomodations 因此 如果访问 accomodations 它将加载该视图 我还可以补充 App Router map fu
  • 2015 年重新审视 Ember Handling 401

    我可以在 Ember Ember Data 中找到大量询问 回答如何从 Rails 后端处理 401 的老问题 许多 如果不是全部的话 在这一点上似乎已经过时了 我已经尝试了我能找到的一切 Ember 数据处理 401 https stac
  • 如何将 hashbang url 更改为历史 API

    我正在使用 ember1 0 rc3 我想将 hashbang url 更改为正常的 url 格式 即 www site com admin page1 到 www site com admin page1 更改 我在应用程序路由器中使用位
  • 与查询参数一起使用时,Ember .observe() 返回两次回调

    http jsbin com vowup 2 http jsbin com vowup 2 如果我单击更改为随机 程序将登录控制台两次 由于某些奇怪的原因 将修订变量设置为字符串时它可以正常工作 但对于数字或任何其他类型的变量会记录两次 将
  • Ember:命名出口错误

    我不知道为什么我的模板没有在指定的插座中呈现 这是我第一次尝试学习 ember 我被困在指定的渠道上 我想渲染侧边栏模板 in the outlet sidebar 和内容模板 in the outlet content 但我不断在控制台中
  • Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?

    Ember 发布新版本 3 6 0 后 我开始在控制台中收到错误 rsvp js 24 未捕获 RangeError 超出最大调用堆栈大小 在 WeakMap get 在 getCacheFor metal js 25 在 Computed
  • 在哪里放置固定装置?

    我应该在使用 ember cli 生成的 Ember JS 应用程序中的哪里定义固定装置 我尝试过很多地方 例如app js并在一个名为 fixtures 的文件夹中 经过一番挖掘后我发现改变Ember MODEL FACTORY INJE
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • Emberjs 将多个控制器加载到一个控制器中

    SCENARIO我目前有一个IndexRoute 我想将另外 3 个控制器加载到其中 另外 3 个控制器称为Sports News Business 我阅读了 embersjs 文档 它指出您需要实现renderTemplate钩入Inde
  • 使用“ember-rails”将路由从 Rails 迁移到现有 Rails 应用程序的 Ember

    将 gem ember rails 用于现有的 Rails 应用程序 我正在尝试使用 Ember 路由一个资源 很多人告诉我这段代码应该可以工作 但事实并非如此 我想突破学习曲线并使这项工作成功 但我需要一些帮助 Error Routing
  • EMBER直接路由URL访问不加载数据

    当我直接从浏览器访问我的网址时遇到问题 它不会加载我的单一帖子信息 示例 index html posts 10052308 但当我访问 index html posts 然后单击我的一篇文章时 它会起作用 我的网址会更改为 index h

随机推荐

  • 如何使用 Scipy 找到局部最小值[重复]

    这个问题在这里已经有答案了 我想从数组或列表中找到局部最小值 通过以下代码 我可以找到局部最大值 我知道存在相关问题 但我仍然想知道 是否存在任何逻辑可以使用相同的代码来查找局部最小值 Code import matplotlib pypl
  • 公司坚持对我们的所有文档使用二进制格式[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在一家公司工作 出于某种原因 该公司坚持所有开发文档都应采用 MS Word 格式 作为二进制格式
  • .NET 中 32 位进程如何与 64 位进程通信?

    Windows 不允许 32 位进程加载 64 位 dll 因此我尝试使用远程处理来允许 32 位进程与 64 位进程交互 问题是 虽然两个应用程序位于同一台计算机上 但一个是 32 位 另一个是 64 位 而且它们必须是这样的 同时使用
  • 从 Sql Server 2000 上的存储过程插入临时表

    我正在尝试完成这里描述的事情 http sqldev wordpress com 2008 05 06 insert into temporary table from stored procedure http sqldev wordpr
  • 使用 char * 访问 int 是否可能具有未定义的行为?

    下面用于测试字节顺序的代码预计具有实现定义的行为 int is little endian void int x 1 char p char x return p 1 但它是否有可能在特意设计的架构上具有未定义的行为 例如 表示的第一个字节
  • Javascript找不到这些变量,为什么?

    我正在使用 Phonegap 创建 Android 应用程序 录音机 但我的代码中有以下 2 个错误 ReferenceError Can t find variable Media TypeError Result of expressi
  • 针对 3.5 框架的 VS2010 上的 RESX 文件存在问题

    这是我最近遇到的一个故事和一个可能的答案 我只是想分享这个信息 因为我在 stackoverflow 上还找不到这个信息 我将我的解决方案从 VS2008 WinXP 32 位升级到 VS2010 Win7 64 位 当我对生成新 RESX
  • 将 HTML 文件转换为 PDF [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 Pandas 绘制成子图

    da 是我的数据框 我想把这个图变成我将拥有的 2 个子图中的一个 当我为这个图添加 plt subplots 2 1 2 时 它最终会将该图分成一个单独的图 并且子图是一个空图 我怎样才能把这段代码变成一个子图 Thank you in
  • 它在 php/html 中的输出详细信息不正确

    我想当用户选择时显示下拉菜单中的所有问题All从问题下拉菜单中并将其输出在下面 问题是它没有这样做 更糟糕的是 它给了我未定义的偏移错误 指出 Notice Undefined offset in on line 605 605行是 ech
  • 使用 UWP 通过拖放重新排序可绑定列表视图

    我正在尝试重新排序ListView通过拖放 它在使用静态项目时与我一起工作 但是当我使用绑定数据时物品来源拖动工作正常 但我无法删除该项目 这是我的代码 C lstSrvMenu ItemsSource Menue MainItems Wh
  • 如何使用 JS 删除或重置 CSS 样式?

    我想使用 JS 删除或重置应用于特定 DOM 节点的样式 node style webkitTransitionDuration 5000ms node style webkitTransformOrigin 200px 200px nod
  • 在 Windows 10 (1803) 上,如果 WPF 透明窗口覆盖在所有应用程序上,所有应用程序都会失去触摸或手写笔功能

    如果我使用简单的空窗口 如下面所示的代码 创建一个新的 WPF 应用程序 我发现 WPF 应用程序覆盖的所有应用程序都失去了触摸或手写笔反应 仅当 Windows 10 升级到 1803 10 0 17134 0 时才能重现此情况
  • 使用 Bootstrap 4 的剩余垂直空间

    我想让 id 网格使用完整的可用垂直空间 div class container fluid div class row mb 2 div class col h2 i class fas fa map marker alt i Test
  • Vaadin 的 vaadinBootstrap.js

    我遇到了令人困惑的问题 我正在使用 Vaadin 7 框架来创建一些 安静简单的 应用程序 当我在 Eclipse 中测试它时 一切正常 但是当我将项目部署到 Tomcat 中时 一些谜团开始出现 当我从管理器应用程序 运行 应用程序时 只
  • 查看特定的 Git 提交 [重复]

    这个问题在这里已经有答案了 可能的重复 获取有关 SHA 1 提交对象的信息 https stackoverflow com questions 7610073 get information about a sha 1 commit ob
  • 如何使用 node.js 构建消息以通过 TCP 发送?

    我需要从 Node js TCP 服务器向多个 TCP 客户端发送 JSON 字符串 为了从客户端的套接字 流读取消息 我需要进行某种消息框架 实现此目的的一种方法是将消息长度作为数组作为消息前缀 然后将其转换为客户端消息的缓冲区大小 我如
  • app.use(验证器()); ^ TypeError:验证器不是函数

    我正在开展一个夏季培训项目 我被要求使用以下命令创建一个登录页面Node js但是 安装后express validator并输入我想在的代码app js文件每次运行时都会打印出一个错误app js or the www在 bin 文件中告
  • 在 /youtube/v3/channels 的结果中没有看到 snippet.customUrl

    根据 YouTube 数据 API V3 网址为https developers google com youtube v3 docs channels snippet customUrl https developers google c
  • ember-data 观察记录数组 isLoading/isUpdating/hasUpdated?

    我正在尝试按周显示日历事件列表 更重要的是我正在尝试重用 DS Store 中已有的数据 这是执行此操作的代码 并且在大多数情况下它都有效 问题是我的eventsChanged观察者运行的次数太多了 当路由器从服务器获取事件时eventsC