2013-03-06 16 views
0

我有一個兩頁的Ember.js應用程序使用ember-data來包裝一個簡單的RESTful API。主頁面是產品列表,另一頁面是一個產品的產品詳細信息頁面。數據通過只有「索引」請求的API加載,/api/products如何在Ember.js中使用只返回所有對象的API的對象控制器?

上述工作正常,當通過主頁面導航網站,但我不知道如何最好地處理直接導航到產品詳細信息頁面。我需要ember-data來請求所有產品,並將這些產品保留在客戶端,以便在用戶瀏覽簡單網站時,不會再向API發送更多請求以獲取產品。但是,我的應用程序中的ProductIndexView和ProductIndexController應該最好只看到一條記錄。

有沒有一種好的方法來處理Ember.js中的這個?我知道我可以將控制器的計算屬性添加到篩選器中,然後將其傳遞給視圖模板。但是,我寧願視圖和控制器不知道完整列表。

+0

檢查此https://github.com/MilkyWayJoe/Ember-RC1-Router-Sample – MilkyWayJoe 2013-03-06 04:54:51

回答

2

您需要將所有路由嵌套到提取所有產品的資源中。

事情是這樣的:

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({})中。這會強制實施數據以返回承諾。這是必要的,以使product路由等待所有products在被調用之前從服務器到達。

+0

啊謝謝!我曾經玩過嵌套這樣的路線,但沒有意識到你可以強迫'find'返回這樣的承諾,或者返回承諾會強制嵌套路線等待。我稍後再試一試。假設它有效,這正是我想要的:) – nubs 2013-03-06 14:43:41

+0

這應該工作。讓我知道發生什麼事。 – 2013-03-06 17:06:02

+0

採取了一點點,然後意識到,我是在前4非rc-1。很棒。 – nubs 2013-03-07 02:03:11

相關問題