2013-12-09 15 views
6

Tôi có một mẫu loại trực tiếp:Jquery loại trực tiếp: Render mẫu trong bộ nhớ

<script id="draggableHelper" type="text/x-jquery-tmpl"> 
    <div class="draggableHelper"> 
     <span data-bind="text: Name"></span> 
    </div> 
</script> 

là có thể tạo ra kết quả của mẫu, và lưu nó vào bộ nhớ, bằng cách gửi các đối tượng để cư mẫu không?

Cái gì như:

var result = ko.renderTemplate($("#draggableHelper").html(), { Name: "Test" }); 
+0

Tôi nghi ngờ điều đó vì Knockout không phải là một công cụ tạo khuôn mẫu. Tại thời điểm không có nó xây dựng "chuỗi HTML" của một cái gì đó. Bạn có thể 'subscribe()' để quan sát và lấy 'innerHTML' từ nút thích hợp. – Tomalak

+0

"Templating bản địa là cơ chế làm nền tảng cho việc tìm kiếm, nếu, với, và các ràng buộc luồng điều khiển khác trong nội bộ của bạn, và sử dụng nó như một khuôn mẫu để hiển thị đối với một mục dữ liệu tùy ý. Tính năng này được tích hợp vào Knockout và không yêu cầu bất kỳ thư viện bên ngoài nào "- http://knockoutjs.com/documentation/template-binding.html – Dimitri

Trả lời

14

Có nó có thể áp dụng các ràng buộc để các nút tự do vào DOM. Chỉ cần sử dụng hàm rất hữu ích ko.applyBindingsToNode để đạt được kết quả mong muốn.

ko.renderTemplateX = function(name, data){ 
    // create temporary container for rendered html 
    var temp = $("<div>"); 
    // apply "template" binding to div with specified data 
    ko.applyBindingsToNode(temp[0], { template: { name: name, data: data } }); 
    // save inner html of temporary div 
    var html = temp.html(); 
    // cleanup temporary node and return the result 
    temp.remove(); 
    return html; 
}; 

Hãy xem ví dụ nhỏ này: http://jsfiddle.net/6s4gq/

Cập nhật:

Ban đầu nó là phương pháp ko.renderTemplate nhưng có tích hợp phương pháp trong Knockout có cùng tên. Ghi đè ko.renderTemplate có thể ngừng hoạt động ứng dụng của bạn, đặc biệt nếu bạn đang sử dụng liên kết template. Hãy cẩn thận!

+2

CẢNH BÁO:' ko.renderTemplate' đã được định nghĩa trong loại bỏ. Mã độc ác này khiến tôi đập đầu vào tường trong hai ngày liên tiếp cố gắng khám phá tại sao tất cả các mẫu 'không có trong bộ nhớ' của tôi đang gây ra lỗi 'ngoài không gian ngăn xếp'. Thay đổi tên của nó xin vui lòng! –

+1

@DaviFiamenghi, tôi không thể biểu lộ số tiền tôi xin lỗi vì đã dành thời gian của bạn! Tôi đã cập nhật câu trả lời của mình. Cảm ơn! –

+1

Haha cảm ơn vì sự hiểu lầm của bạn, thưa bạn. Và xin lỗi vì bộ phim, tôi hơi bực mình khi nghe câu trả lời –

0

Câu trả lời của f_martinez thực sự gần với những gì tôi cần, tôi chỉ phải chỉ định công cụ mẫu để làm cho nó hoạt động. Chức năng của tôi:

var renderTemplate = function (name, data) { 
    // create temporary container for rendered html 
    var temp = $("<div>"); 

    // apply "template" binding to div with specified data 
    var options = { 
     template: { 
      name: name, 
      data: data, 
      templateEngine: new ko.nativeTemplateEngine() 
     } 
    }; 

    ko.applyBindingsToNode(temp[0], options); 

    // save inner html of temporary div 
    var html = temp.html(); 

    // cleanup temporary node and return the result 
    temp.remove(); 

    return html; 
}; 
Các vấn đề liên quan