2013-03-23 69 views
3

,我已經找到了教程&指南建議Ember.js模式非常的數據中心,在您有持久保存到服務器和/或模型填充在瀏覽器數據與來自服務器的數據。Ember.js搜索型號動詞

那些更加以動詞爲中心的東西呢?例如,我的情況是,到目前爲止,我有一個「搜索」模型,其中搜索具有查詢,狀態(「beforesearch」,「搜索期間」等),並且希望得到一些結果。我希望搜索到「runQuery」,它會向服務器發出一個ajax請求,然後返回並填充結果,並將其狀態更改爲「aftersearch」。

什麼是對模型處理這類動詞的最佳方式? 「runQuery」應該通過ember-data去發佈,還是用$ .ajax或類似的手工發佈?我是否可能以錯誤的方式思考模型,而實際上這應該通過控制器進行?

編輯:讀了上休息了一下後,我想我想是張貼到「控制器」的資源。因此,舉例來說:

POST:/搜索(創建搜索)

POST:/搜索/ 1 /運行(執行搜索1中的 「運行」 控制器

不Ember.js /燼 - 數據有一個像這樣的調用控制器資源的推薦方式?

回答

3

Ember-data使用的模型對象非常重視使用包含各種信息字段和關係的模型對象,並且由一個唯一的ID來定義我的API的一半就像是什麼燼-data預計和一半是像你所描述的,它更多的是數據處理或執行計算而不是創建/檢索更新/更新/刪除具有ID的數據對象。對這些計算進行相同處理併爲其分配一個id並將其保存在數據庫中是沒有意義的。

在我的情況,因爲我有兩個燼數據樣式的數據對象和計算功能,我用灰燼數據和定製Ajax請求的混合。我有存儲的關係數據通過ember-data檢索,但是我擴充了模型以包含對計算部分的訪問。

例如:

App.Event = DS.Model.extend({ 
    name: DS.attr('string'), 
    items: DS.hasMany('App.Item'), 
    ...etc... 

    searchData: null, 
    searchInEvent: function(data) { 
    var _this = this; 
    return $.ajax({ 
     url: "/api/events/" + this.get('id') + "/search/", 
     dataType: 'json', 
     type: 'POST', 
     data: data 
    }).then(function(result){ 
     _this.set('searchData', result); 
    }); 
    } 
}); 

App.Event是正常餘燼的數據模型,並通過路由器通過通常餘燼約定加載,並作爲各種控制器需要訪問搜索功能,他們可以通過訪問它searchInEventsearchData已添加到模型中。