2013-05-17 25 views
24

Bên trong chức năng trợ giúp mẫu sao băng, có sự khác biệt về hiệu suất, số lần hiển thị lại hay bất kỳ điều gì khác nếu tôi trả về kết quả của một số find và số fetch?Sử dụng Meteor tìm nạp hoặc tìm trong các hàm trợ giúp mẫu?

Ví dụ, cách tiếp cận tìm:

Template.players.topScorers = function() { 
    return Users.find({score: {$gt: 100}}, {sort: {score: -1}}); 
}; 

Hoặc thêm một lấy:

Template.players.topScorers = function() { 
    return Users.find({score: {$gt: 100}}, {sort: {score: -1}}).fetch(); 
}; 

Phương pháp tìm chỉ là những gì hiện đang trong docs, nhưng tôi đã nhìn thấy rất nhiều những người khác sử dụng fetch.

Trả lời

46

Có.

Bằng cách sử dụng tìm nạp, bạn đăng ký phụ thuộc vào toàn bộ kết quả truy vấn được đặt tại chỗ. Bằng cách sử dụng find và sau đó lặp lại bằng cách sử dụng {{#each}}, một phụ thuộc được đăng ký trên mọi tài liệu riêng biệt. Vì vậy, khi một tài liệu thay đổi, chỉ có mã có liên quan mới được hiển thị lại. Khi sử dụng fetch, việc thay đổi bất kỳ tài liệu nào trong tập kết quả sẽ hiển thị lại toàn bộ phạm vi mà bạn đã sử dụng fetch.

Đối với các bộ kết quả nhỏ, nó không tạo ra bất kỳ sự khác biệt nào. Đối với các tập lớn hơn với những thay đổi thường xuyên, nó có thể làm chậm tính toán và tạo ra các đồ tạo tác trực quan không mong muốn.

Tôi đã viết một post có thể giúp bạn hiểu nó (nó không trả lời câu hỏi của bạn trực tiếp mặc dù)

0

Đây là những gì chúng tôi làm theo trong Oodles Technologies.

Đối với việc xác định helper chỉ cần vào mẫu của bạn js tập tin ví dụ nếu bạn có một cái tên mẫu như allInventory vì vậy chỉ cần đi đến allInventory.js tập tin và viết helper như sau: -

Template.allInventory.helpers({ 

}) 

làm một chức năng bên helper này trong đó bạn đặt logic của bạn để lấy dữ liệu từ cơ sở dữ liệu hoặc phiên hoặc từ dịch vụ khác và vì sử dụng đó trong bạn html như: -

Template.allInventory.helpers({ 
     productDetails: function() { 
       return Session.get('dbData'); 
     } 
    }) 

On html side you just need to use the function name as follows:- 

{{#each productInfo in productDetails}} 

     <div class="imgb"><img src="{{productInfo.image_url}}"></div> 
      {{productInfo.item_name}} 
      {{productInfo.seller_sku}} 
      {{productInfo.quantity}} 
      {{productInfo.price}} 

<a type="button" class="full-view text-success"><i id="fullView" data="{{productInfo._id}}" class="fa fa-eye"></i></a> 

      {{/each}} 

như bạn có thể thấy trong productDetails trên một tên hàm trong helper của bạn lớp mà bạn lấy dữ liệu bạn muốn hiển thị trên Html của bạn có thể truy cập trực tiếp thông qua tên đó và bạn có thể duyệt qua mỗi vòng lặp trong các mẫu html.

Các vấn đề liên quan