2012-02-14 31 views
5

Tôi có một phần tử ul được điền thông qua mẫu liên kết.mẫu loại bỏ ràng buộc

<script type="text/html" id="someTemplate"> 
<li> 
    <span data-bind="text: someText"> 
</li> 
</script> 

<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}"> 
</ul> 

Nhưng tôi muốn các li-tag đầu tiên sẽ không được li-tag từ mẫu nhưng nhau với nút trong đó và nó sẽ không được kết nối với mảng someElemets. Nếu tôi làm theo cách đó,

<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}"> 
    <li><button data-bind=click: doSomething">Click me</button></li> 
</ul> 

sau đó li-tag bằng nút sẽ là ảnh cuối cùng sau khi hiển thị. Cách tốt nhất để giải quyết vấn đề đó là gì?

Trả lời

11

Bạn có thể sử dụng cú pháp kiểm soát dòng chảy containerless, databinding sử dụng comment thẻ. Không cần mẫu. more info

<ul>  
    <li><button data-bind=click: doSomething">Click me</button></li> 
    <!-- ko foreach: someElemets-->   
    <li> 
     <span data-bind="text: someText"></span> 
    </li>  
    <!-- /ko --> 
</ul> 
+0

Chính xác. Kiểm soát không giới hạn (html/ko comment) của các ràng buộc luồng là lý tưởng cho tình huống này. Bạn có thể làm foreach, if, ifnot, with, và template trong chúng mà không cần phải tạo một phần tử DOM chỉ cho KO. –

1

Tôi không biết cách dễ dàng để truy cập chỉ mục khi bên trong mẫu. Bạn có thể sử dụng tùy chọn mẫu như mô tả ở How to use foreach with a special first element?

Mã của bạn sẽ là một cái gì đó như:

<ul data-bind="template: { name: 'someTemplate', foreach: someElemets, templateOptions: { first: someElemets()[0]} }"> 
</ul> 

<script id="someTemplate" type="text/html"> 
    <li> 
    {{if $item.first === $data}} 
     <button data-bind="click: doSomething">Click me</button> 
    {{/if}} 
    <span data-bind="text: someText"> 
    </li> 
</script> 
+0

và nếu tôi muốn sử dụng biến thể mà tôi nên thêm phần tử rỗng đầu tiên đến các mảng someElemets? trông giống như một cheat :) – avgorohov

+0

Bạn chỉ có thể thay thế {{else}} bằng {{/ if}} để luôn hiển thị . Tôi sẽ chỉnh sửa câu trả lời của mình. –

+0

Một câu hỏi, có lẽ bất cứ ai biết tại sao khi tôi đang sử dụng từ khóa '$ data' và' $ item' - mẫu không được hiển thị, nhưng khi truy cập các phần tử được truyền vào 'foreach' bởi tên trường ViewModel - tất cả đều hoạt động tốt, ví dụ tôi bị ràng buộc viewModel với mảng người dùng (với trường 'tên' đơn), sau đó liên kết với' name' làm việc trong khuôn mẫu, nhưng khi sử dụng '$ data' hoặc' $ item' - không thể làm việc đó – sll

7

Sau đây sẽ làm điều đó:

<!-- ko template: { name: 'template-name', data: vm } --> <!-- /ko --> 
Các vấn đề liên quan