2013-03-13 25 views
2

一直在做一些搜索和閱讀的燼數據的源代碼,但我無法弄清楚如何做到這一點。所以我的索引頁面像這樣加載數據:做一個搜索/加載自定義結果到燼寶藏?

App.SaleRecordsRoute = Ember.Route.extend({ 
    setupController: function(controller) { 
    controller.set('content', App.SaleRecord.find()); 
    } 
}); 

在服務器上,我只是迴應最新的10條記錄。我也想做的是查詢同一個網址,傳遞一個搜索字段。將根據數據庫中的幾個字段檢查此搜索字段或條件。這些字段是跨越幾個不同的車型在連接語句,所以我不認爲我可以這樣做:

App.SaleRecord.find({ book.title: critera }); 

書作爲屬於關聯記錄。

在控制器的這條路線,這裏就是我有至少查詢數據,預期其工作原理:

App.SaleRecordsController = Ember.ArrayController.extend({ 
    search: function() { 
    $.getJSON('/search?criteria=' + $('.criteria').val(), function(data) { 

    }); 
    } 
}); 

但我不確定什麼從這裏做。

  1. 如果某些記錄由於是最近10次結果的一部分而已在商店中,是否需要先將其卸載?
  2. 我如何從json散列加載數據到商店?我知道如何創建一個記錄並填充它,所以我可以循環訪問數據,但是我想知道是否有一個記錄。

謝謝。我希望這個問題是清楚:)

回答

4

設法找到一個答案,這主要得益於該問題/答案在這裏:Ember.js Ajax call is not working as expected

我感動Ajax調用了控制器,併成爲一個模範作用。所以,像在鏈接的問題,我做了一個自定義函數在控制器中稱:

LocalBookFinder.SaleRecord = DS.Model.extend({ 
    isbn: DS.attr('string'), 
    price: DS.attr('number'), 
    condition: DS.attr('string'), 
    book: DS.belongsTo('LocalBookFinder.Book') 
}); 

LocalBookFinder.SaleRecord.reopenClass({ 
    search: function(criteria) { 
    var result = Ember.ArrayProxy.create({content: []}); 
    var _this = this; 
    $.getJSON('/search?criteria=' + criteria, function(data) { 
     var ids = []; 
     var arr = data.sale_records; 
     for(var i = 0; i < arr.length; i++) { 
     var sale_record = arr[i]; 
     if(ids.indexOf(sale_record.book_id) == -1) { 
      ids.push(sale_record.book_id); 
     } 
     } 

     var ajax_count = ids.length; 
     var sale_records = []; 
     for(var i = 0; i < ids.length; i++) { 
     $.getJSON("/books/" + ids[i], function(data) { 
      for(var j = 0; j < arr.length; j++) { 
      var sale_record = arr[j]; 
      if(sale_record.book_id == data.book.id) { 
       sale_record.book = data.book; 
       sale_records.push(sale_record); 
      } 
      } 
      if(i == ajax_count) { 
      console.log(sale_records); 
      result.set('content', sale_records); 
      } 
     }); 
     } 
    }); 
    return result; 
    } 
}); 
控制器

然後,我簡單地做:

search: function() { 
    var _this = this; 
    var result = LocalBookFinder.SaleRecord.search($('.criteria').val()); 
    this.set('content', result); 
} 

我想搜索的第一個AJAX位在模型中的功能非常簡單。它請求數據,並設置一個空的數組代理來存儲它。現在,由於我正在從子記錄中加載書籍圖像和標題,因此我需要分別調用這些數據。因此,對於第一個結果集,我填充一個我需要請求的book ID數組。每次使用ajax調用時,我都會查看銷售記錄數組,並將書屬性設置爲生成的哈希數據。一旦完成(通過計數器),我使用JSON數據設置結果內容。