Ember.js 添加/删除数据时如何刷新Ember中的模板?

Ember.js 添加/删除数据时如何刷新Ember中的模板?,ember.js,ember-data,Ember.js,Ember Data,我的余烬应用程序有一个简单的部分,用来绘制一个图书列表。问题是,如果用户在从服务器加载书籍之前访问列表,列表将为空。即使数据加载完毕,列表仍将为空 加载数据后,Ember必须使用哪些方法刷新视图?那么这个代码应该放在哪里呢?我的代码是这样的: 路线: App.MyRoute = Ember.Route.extend({ model: function() { return App.store.find(App.Book); // get books from the server

我的余烬应用程序有一个简单的部分,用来绘制一个图书列表。问题是,如果用户在从服务器加载书籍之前访问列表,列表将为空。即使数据加载完毕,列表仍将为空

加载数据后,Ember必须使用哪些方法刷新视图?那么这个代码应该放在哪里呢?我的代码是这样的:

路线:

App.MyRoute = Ember.Route.extend({
  model: function() {
    return App.store.find(App.Book); // get books from the server
  }
});
模板:

{{#each book in model}}
  <li {{ bindAttr data-book-id="book.id" }}>
    <span>{{ book.name }}</span>
  </li>
{{/each}}
{{{#模型中的每本书}

{{book.name}

{{/每个}}
为了记录在案,我想这样做:

{{#if model.get('isLoaded')}}
  {{#each book in model}}
    <li {{ bindAttr data-book-id="book.id" }}>
      <span>{{ book.name }}</span>
    </li>
  {{/each}}
{{else}}
   <span>Loading books...</span>
{{/#if}}
{{#if model.get('isLoaded')}
{{#模型中的每本书}

{{book.name}

{{/每个}}
{{else}
正在加载书籍。。。
{{/#if}

如我在上面的评论中所述,
{{each}
帮助程序也有一个
{{else}}
,您可以在其中为列表添加一个微调器,几乎与为单个项目添加微调器的方式相同。至于填充列表视图,您不必手动调用任何方法,因为框架负责填充它提供给您的
ModelArray
中的记录。如果它甚至在从后端API接收JSON时也无法填充数据,那么问题一定出在存储/适配器/序列化程序或JSON格式中。为了正确地将JSON响应转换为Ember数据期望作为应用程序模型的有效数据,应该检查哪个服务器作为响应发送,以及存储是如何设置的(适配器/序列化器/etc)。

the
{{each}
助手还有一个
{else}
,您可以在其中为列表添加一个微调器,几乎与您对单个项目所做的方式相同。至于填充列表视图,您不必手动调用任何方法,因为框架负责填充它提供给您的
ModelArray
中的记录。如果它甚至在从后端API接收JSON时也无法填充数据,那么问题一定出在存储/适配器/序列化程序或JSON格式中。你的服务器送你什么?你是如何配置你的商店的?啊,就是这样。在我的route的
model
函数中,我实际上将
ModelArray
转换为一个普通的JavaScript数组,并将其用作模型(尽管我在上面的代码中没有说明这一点)。这就是为什么余烬不会自动更新。如果你发布官方回复,我会接受。谢谢添加了来自评论的答案,谢谢!作为后续行动,由于Ember仅检测特定类型对象的更改(例如,
RecordArray
),我如何修改这些对象,使Ember仍能检测到更改?例如,假设我只想展示名称以“A”开头的书籍。如果我使用
filter
函数,它似乎会将
RecordArray
转换为一个普通的JavaScript数组……你能用更多的细节更新你的问题吗,如果可能的话,用你正在做/试图做的事情创建一个示例?嗯,我考虑了一下,我认为正确的答案是,我的路由应该简单地将
RecordArray
设置为模型,然后在控制器中对该模型进行修改。我将其更改为简单的
App.Book.find()
,删除
App.store.find
Stuff好的,我更改了。我向路由的控制器添加了一个函数,该函数接受
this.get('content')
,并对其进行修改,返回我不想看到的书籍列表。那仍然不起作用。关键是在函数上设置
.property('content@each')
。现在,当数据加载完毕并添加/删除新记录时,模板中的列表会自动重新绘制。