2013-03-21 33 views
5

Tôi hiện đang cố gắng tuyên truyền một hàng bảng <tr> mẫu thành một thẻ <tbody>. Dưới đây là một ví dụ:Mẫu phá hủy/Knockout Binding Not Inserting

HTML:

<table> 
    <tbody data-bind="template: { name : 'tableTemplate', foreach : tableRow }"> 
    </tbody> 
</table> 
<script type="text/html" id="tableTemplate"> 
    <tr> 
     <!-- First Name --> 
     <td data-bind="text: firstName"></td> 
     <!-- Last Name --> 
     <td data-bind="text: lastName"></td> 
    </tr>       
</script> 

DurandalJS:

define(function(require) { 
    var self = this; 
    self.app = require('durandal/app'); 

    return { 
     tableRow: ko.observableArray([ 
      { firstName: "DemoFirstName" , lastName: "ExampleLastName" }, 
      { firstName: "ExampleFirstName", lastName: "DemoLastName" } 
     ]); 

    //viewAttached and other non-applicable console log functions here 
    }; 
}); 

Tất cả mọi thứ trong HTML sẽ đúng dữ liệu ràng buộc cho đến khi nó chạm bàn; tất cả các ràng buộc dữ liệu sau đó trở nên chết.

Tôi khá mới đối với Durandal và đang học khi tôi đi.

+0

Có lỗi nào trong bảng điều khiển javascript của trình duyệt không? – nemesv

+0

bạn có thể đăng toàn bộ mã của mình không. Những gì bạn đã hiển thị ở đây sẽ hoạt động. Ngoài ra, tại sao bạn áp dụng ứng dụng này? chỉ cần tạo một biến mới. –

+0

CẬP NHẬT: vì cả hai bạn nói gì, tôi bắt đầu điều tra cẩn thận ở bất kỳ nơi nào khác trong mã có thể gây ra sự cố. Đã có một ràng buộc dữ liệu cũ từ một tác giả trước đây đang ngồi lồng nhau ở gần dưới cùng của DOM của phương thức đã gây ra lỗi giao diện điều khiển rằng dữ liệu liên kết đã chết/không đi đến bất cứ điều gì (tại sao tôi không nhận thấy nó trước đây? , Bạn sống và bạn học). Một khi tôi nhận xét nó ra, tôi bắt đầu nhận được một lỗi giao diện điều khiển nói rằng nó 'Không thể tìm thấy mẫu với ID tableTemplate'. Tôi sẽ tiếp tục điều tra. – Arctic

Trả lời

2

Có thể muốn thử loại này thay vì các mẫu cách tiếp cận:

<table> 
    <tbody data-bind="foreach: tableRow"> 
    <tr> 
     <!-- First Name --> 
     <td data-bind="text: firstName"></td> 
     <!-- Last Name --> 
     <td data-bind="text: lastName"></td> 
    </tr>       
    </tbody> 
</table> 
+0

Tôi không thể nhận được phương pháp tiếp cận mẫu để làm việc, nhưng thay thế của bạn không. Cảm ơn bạn! Đã cho bài đăng của bạn một +1 xứng đáng. Mặc dù, tôi muốn tôi biết tại sao phương pháp tiếp cận mẫu không hoạt động trong trường hợp có tình huống trong tương lai mà tôi thực sự cần phải sử dụng nó. – Arctic

+0

Không chắc chắn, nhưng tôi sẽ đoán rằng đánh dấu mẫu bạn đã hiển thị là trong mô-đun Durandal và có lẽ liên kết 'mẫu' không tìm thấy mẫu theo cách mà ứng dụng Knockout thẳng có thể. Bạn có thể muốn thử điều này trong một mẫu Knockout mà không cần Durandal xem. – 7zark7

+0

Vâng, nó nằm trong một mô-đun Durandal, và một phần tốt của tài liệu Knockout và các ví dụ chỉ làm việc với một đơn giản thẳng lên KO viewModel. Thật không may, Durandal không có nhiều tài liệu và đặt câu hỏi cho các tác vụ phổ biến như vậy. – Arctic

8

Tôi chạy vào cùng một vấn đề, và tôi đào lên câu trả lời trên nhóm google Durandal. Tôi đã đăng kết quả ở đây về câu hỏi của mình. KO cannot find template with ID

Về cơ bản, bạn không thể sử dụng các mẫu Knockout có tên/ID'd, chúng không được hỗ trợ. Hỗ trợ có thể đến sớm, theo các nhà phát triển Durandal trên nhóm tin của họ. Cách giải quyết là sử dụng chức năng soạn thảo nội dòng hoặc của Durandal.

+0

+1 tới Kal_Torak để đăng thông tin ở đây cũng vậy .. :) – mikekidder