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? 的相关文章

  • 使用变量名调用 Handlebars {{render}}

    有没有办法将变量上下文传递给 render helper 例如 我的模型具有多态关系 我想为每种不同类型呈现适当的视图 无需编写一整串if声明 my events模板看起来像这样 ul each event in model li even
  • 如何清除ember js中的表单数据

    嗨 我对 ember js 很陌生 我写了一个新员工入职表格 并通过路线发送数据 数据保存成功 但问题是提交表单后我的表单数据没有清除 代码如下 app js App Router map function this resource sa
  • Ember:命名出口错误

    我不知道为什么我的模板没有在指定的插座中呈现 这是我第一次尝试学习 ember 我被困在指定的渠道上 我想渲染侧边栏模板 in the outlet sidebar 和内容模板 in the outlet content 但我不断在控制台中
  • ember-data-1.0.0 activemodeladapter 错误在传递给“push”的哈希中包含“id”

    我在后端使用 ember data 和带有 Rails 和 mongoid mongodb 的 activemodel 适配器 每当我向 Rails 应用程序发出请求时 emberjs 都会显示返回的数据 但在 chrome 开发人员控制台
  • Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?

    Ember 发布新版本 3 6 0 后 我开始在控制台中收到错误 rsvp js 24 未捕获 RangeError 超出最大调用堆栈大小 在 WeakMap get 在 getCacheFor metal js 25 在 Computed
  • 如何在 Ember 中捕获数组是否插入到车把中?

    我希望这不是重复的问题 但我无法找到解决方案 我有工作和用户 一个用户有很多工作 JP User DS Model extend firstName DS attr string lastName DS attr string email
  • 在哪里放置固定装置?

    我应该在使用 ember cli 生成的 Ember JS 应用程序中的哪里定义固定装置 我尝试过很多地方 例如app js并在一个名为 fixtures 的文件夹中 经过一番挖掘后我发现改变Ember MODEL FACTORY INJE
  • 将检索到的 Ember 数据记录转换为普通对象的 Ember 方法是什么?

    我使用以下方法检索了一系列记录var items store find model 返回的对象是一个实例RecordArray 并包含多个条目 每个条目都有一个 Ember 对象 允许我在记录中获取和设置属性 一切看起来都不错 现在我需要将
  • 将 css 类添加到 Ember.js 中的

    如何将CSS类添加到特定路线上的body标签 我尝试使用body在车把模板中添加标签但不起作用 Update 经过一番谷歌搜索后 我找到了这个解决方案 不确定这是最好的方法 但它确实有效 App SomeRoute Em Route ext
  • 未捕获错误:找不到从“ui/app”loader.js 导入的模块“ember”:164

    我使用以下命令构建并提供我的 ember 应用程序 ember build ember serve 两者都按预期工作 然后我转到以下 localhost 4200 URL 查看应用程序 并在 javascript 控制台中看到以下错误 Un
  • Rails 和 Ember 的 JSONAPI 强参数

    我将 Ember 与 ember data 和 Rails api 一起使用 我有一个 createRecord 和 save 来保存工作正常的记录 用于在 Rails 中创建记录的发布请求的网络选项卡中的有效负载如下所示 data att
  • Ember.js - 从计算属性返回 unicode 字符

    我试图从计算属性返回 unicode 字符 但是 不断逃脱 amp 我什至尝试过像这样返回 Handlebars SafeString return new Ember Handlebars SafeString 61573 产生相同的结果
  • 从 Ember.Route 中访问参数的正确方法是什么?设置控制器?

    Ember Route model可以访问params变量 但是Ember Route setupController才不是 这对我来说很麻烦 因为我的路径有多个动态段 我需要在我的模板中使用它们 具体来说 我的路径如下所示 project
  • Ember 克隆模型创造新纪录

    我想克隆当前正在编辑的模型 我发现了几种几乎有效的方法 但两者都不完美 1 model get data attributes 获取除驼峰式形式的关系之外的所有属性 生成一条新记录 但关系当然丢失了 2 model serialize 生成
  • 使用 Ember + Handlebars 在运行时动态选择视图

    我正在使用 Ember Ember Data 和 Handlebars 来显示包含多种不同类型模型的时间线 我当前的实现虽然运行正常 但似乎可以通过约定和助手来大幅改进 但是 我不知道如何使用已经定义的模板 这就是我所拥有的 view Ap
  • 围绕活动的 {{linkTo}} 创建一个
  • 最干净的获取方式是什么 li class active 对于以下 Ember 应用程序中的活动页面 索引 html app js App Ember Application create App Router map function th
  • 重写 buildURL 方法以包含父模型的 id

    关于 ember data 和子类化 DS RESTAdapter 来覆盖buildURL 我有两个端点 可以说他们是 example com users user id example com users user id images 将
  • 如何在重新渲染 Ember 视图的一部分时随时运行代码?

    我的目标是拥有一个类似 Facebook 的按钮 可以有条件地出现在 Ember 视图中 我的模板是 if condition Click Like div class fb like fb edge widget with comment
  • Ember 模板中的访问常量

    不确定正确的 Ember Way 是什么来做到这一点 我有以下模板 我想要三个task item list组件实例 每个实例都有不同的taskState价值 显然 我想摆脱神奇的数字 h4 Tasks h4 div h5 Backlog h
  • 在 ember-cli 中安装 Foundation 5

    我对 ember 相当陌生 对构建工具也很陌生 我目前正在使用通常的基础安装以及基础 cli 和指南针来编译我的 css 这有点痛苦 并且对于团队工作来说非常糟糕 我认为用 Bower 安装文件并使用会更好ember cli compass

随机推荐

  • 如何使用 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