2013-09-21 33 views
5

Tôi muốn thực hiện tính năng tìm kiếm trên trang web của mình để tôi thực hiện cuộc gọi jquery ajax với văn bản đến máy chủ tốc độ tìm kiếm mongodb và cung cấp mảng đối tượng của người dùng phù hợp. Bây giờ tôi nhận được đối tượng này thành công nhưng vì không có partials trên ejs làm thế nào tôi có thể làm mới chỉ là danh sách kết quả tạo ra html cho mỗi người dùng?Cách tạo nội dung trên ejs bằng jquery sau khi gọi ajax để chuyển máy chủ

Trả lời

9

Gói EJS nút đi kèm với thư viện javascript phía máy khách nằm trong ./node_modules/ejs/ejs.js hoặc ./node_modules/ejs/ejs.min.js. Sau khi bạn bao gồm điều này trên trang của mình, bạn sẽ muốn tải mẫu, sau đó tạo HTML từ mẫu. Detecting an undefined object property Javascript mẫu (tải mẫu trên tải trang sẽ là một chút lý tưởng hơn):

function getData() { 
    // Grab the template 
    $.get('/results.ejs', function (template) { 
     // Compile the EJS template. 
     var func = ejs.compile(template); 

     // Grab the data 
     $.get('/data', function (data) { 
      // Generate the html from the given data. 
      var html = func(data); 
      $('#divResults').html(html); 
     }); 
    }); 
} 

EJS:

<table> 
    <tr> 
     <th>ID</th> 
     <th>Name</th> 
    </tr> 
    <% data.forEach(function (d) { %> 
    <tr> 
     <td><%- d.id %></td> 
     <td><%- d.name %></td> 
    </tr> 
    <% }); %> 
</table> 

cuộc gọi Ajax trong nhanh:

app.get('/data', function (req, res) { 
    res.send({ data: [ 
     { id: 5, name: 'Bill' }, 
     { id: 1, name: 'Bob' } 
    ]}); 
}); 
+0

Bạn có thể diễn ra hàm 'getData' bên trong chính khuôn mẫu đó hoặc bạn sẽ phải tạo một tệp' script' bên ngoài chứa hàm mà bạn sẽ tiêm vào bên trong trang của mình? – AllJs

+0

@AllJs, Theo như tôi biết bạn có thể đặt nó trong kịch bản, tuy nhiên, tôi nghĩ rằng nó sẽ được tổ chức tốt hơn nếu bạn có một tập tin kịch bản bên ngoài. – matth

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