【问题标题】:How do I use an object controller in Ember.js with an API that only returns all objects?如何将 Ember.js 中的对象控制器与仅返回所有对象的 API 一起使用?
【发布时间】:2013-03-06 16:57:10
【问题描述】:

我有一个两页的 Ember.js 应用程序,它使用 ember-data 来包装一个简单的 RESTful API。主页是产品列表,另一个页面是一个产品的产品详细信息页面。数据通过只有“索引”请求的 API 加载,/api/products

当通过主页导航网站时,上述内容可以正常工作,但是我不确定如何最好地处理直接导航到产品详细信息页面。我需要 ember-data 来请求所有产品并将这些产品保留在客户端,这样当用户浏览简单站点时,它就不会再向产品 API 发出任何请求。但是,我的应用程序中的 ProductIndexView 和 ProductIndexController 最好只看到一条记录。

在 Ember.js 中是否有处理此问题的好方法?我知道我可以将计算属性添加到过滤完整列表的控制器中,然后将其传递到视图模板中。但是,我宁愿视图和控制器不知道完整列表。

【问题讨论】:

标签: ember.js ember-data


【解决方案1】:

您需要将所有路由嵌套在可获取所有产品的资源中。

类似这样的:

App.Route.map(function() {
  this.resource('products', { path: '/' }, function() {
    this.route('index');
    this.resource('product', { path:'/:product_id'} );
  });
});

App.ProductsRoute = Ember.Route.extend({
  model: function() {
    return App.Product.find({});
  }
});

App.ProductsIndexRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor('products');
  };
});

使用products/index 模板显示所有产品。

使用product 模板显示产品详细信息。

请注意我包含在App.Product.find({}) 中的{}。这会强制 ember-data 返回一个承诺。这是使product 路由等待所有products 从服务器到达后才被调用的必要条件。

【讨论】:

  • 啊,谢谢!我曾尝试过像这样嵌套路由,但没有意识到您可以强制 find 返回这样的承诺,或者返回承诺会强制嵌套路由等待。我稍后会试一试。假设它有效,这正是我想要的:)
  • 花了一点时间,然后意识到我在 pre-4 而不是 rc-1。效果很好。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多