2012-12-18 34 views
9

Tôi có một bộ sưu tập được xuất bản trên máy chủ và tự động đăng ký trên máy khách. Tôi muốn đặt mục 'đã chọn' trong phiên và có bản cập nhật mẫu để chỉ hiển thị mục đã chọn, nhưng có vẻ như điều này chỉ có thể được thực hiện với một vòng lặp tới máy chủ (hoàn toàn không cần thiết).Phản ứng chỉ phía máy khách với Meteor?

chung:

var Missions = new Meteor.Collection('missions'); 

Chủ đầu tư:

Template.missionList.missions = function() { 
    var currMission = Session.get('selectedMission'); 
    var searchMission = {}; 
    if(currMission) 
    { 
     searchMission['_id'] = currMission; 
    } 
    return Missions.find(searchMission); 
}; 
Template.missionList.events({ 
    'click div.mission': function (e, t) { 
     Session.set('selectedMission', 
      this._id == Session.get('selectedMission') ? null : this._id 
     ); 
    } 
}); 
Template.mission.isSelected = function() { 
    return this._id == Session.get('selectedMission'); 
}; 
Meteor.autosubscribe(function() { 
    Meteor.subscribe("missions"); 
}); 

Server:

Meteor.publish('missions', function() { 
    // there are really some filters here, but removed for simplicity 
    return Missions.find(); 
}); 

mẫu:

<template name="missionList"> 
    <div class="missionList"> 
    {{#each missions}} 
     {{> mission}} 
    {{/each}} 
    </div> 
</template> 

<template name="mission"> 
    <div class="mission{{#if isSelected}} selected{{/if}}">details</div> 
</template> 

Yêu cầu của tôi là dành cho Missions.find() trong Template.missionList.missions để lọc kết quả được lưu trong bộ nhớ cache phía máy khách, thay vì yêu cầu lại từ máy chủ, nhưng dường như tôi không thể tìm thấy cờ hoặc cài đặt để cho phép tôi thông báo cho minimongo chỉ sử dụng dữ liệu hiện có. Tôi cũng không hoàn toàn chắc chắn nếu đây là những gì tôi nên làm, tôi bắt đầu chỉ bằng cách sử dụng jQuery để ẩn các nhiệm vụ không được lựa chọn nhưng nhận được vòng Meteor của tôi và nó có vẻ tự nhiên để sử dụng dữ liệu và khả năng phản ứng để thúc đẩy lựa chọn/lọc cục bộ.

Có cách nào tránh vòng tròn hoặc tôi chỉ sử dụng sai không?

Trả lời

4

Bằng cách thiết lập mối quan hệ xuất bản/đăng ký, bạn đang tạo một dạng sao chép cơ sở dữ liệu được đơn giản hóa. Minimongo sẽ có một bản sao của dữ liệu cục bộ và thực thi find() cục bộ mà không có một vòng lặp máy chủ. Nếu bạn nhìn thấy hoạt động mạng hoặc gọi đến mã máy chủ, đó là vì sao băng thường xuyên làm việc sau hậu trường để giữ cho đăng ký đồng bộ với máy chủ, không phải cho tìm kiếm cụ thể của bạn. Điều này cũng có nghĩa là bạn phải cảnh giác với việc gửi quá nhiều dữ liệu cho khách hàng, vì vậy chức năng xuất bản phía máy chủ của bạn có thể muốn lọc theo các trường cụ thể mà khách hàng cần, ngoài các tiêu chí lựa chọn hiện tại của bạn.

+0

Cảm ơn bạn đã làm rõ, đây là những gì tôi mong đợi, nhưng có vẻ khó dự đoán, vì đôi khi không có hoạt động mạng nhưng thời gian khác có. Có lẽ nó chỉ là một chút ngẫu nhiên khi xử lý đồng bộ. Chúc mừng :) –

+1

Đây là cách bạn thấy [gói ddp trong thời gian thực] (http://meteorhacks.com/discover-meteor-ddp-in-realtime.html) –

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