2013-01-09 29 views
5

Tôi có một mảng quan sát được, được liên kết với danh sách các div có thể chỉnh sửa được. Tôi có nút 'thêm'. Khi nhấp vào tôi thêm một đối tượng vào mảng và muốn tập trung vào div tương ứng.Làm cách nào để nhận phần tử DOM được liên kết với đối tượng cụ thể trong KnockoutJS?

<ul id='list' data-bind="foreach: array"> 
    <li> 
    <div contenteditable="true" data-bind="text: $data.text"></div> 
    </li> 
</ul> 
<div id="add">+</div> 

javascript

var viewModel = { 
    array: ko.observableArray([]) 
}; 

ko.applyBindings(viewModel, document.getElementById('list')); 

document.getElementById('add').onclick = function (evt) { 
    var newObject = {text : ''}; 
    viewModel.array.push(newObject); 
    // give focus to the newly created div 
}; 

Có thể lấy dữ liệu quan sát được có DOM yếu tố ko.dataFor(dom). Làm cách nào để lấy DOM theo dữ liệu?

http://jsfiddle.net/5rxdZ/

Cảm ơn

Trả lời

6

Bạn không thể nhận được các phần tử DOM từ các dữ liệu riêng của mình. Trong trường hợp này, bạn có thể sử dụng liên kết hasfocus để di chuyển tiêu điểm đến phần tử mới. Tài liệu tại đây: http://knockoutjs.com/documentation/hasfocus-binding.html

Thậm chí chỉ cần đặt hasfocus: true trên phần tử mới sẽ thực hiện thủ thuật.

Ngược lại, nếu bạn không muốn tập trung được áp dụng cho các yếu tố ban đầu trả lại, sau đó bạn có thể vượt qua trong một lá cờ cho các phần tử mới được tạo ra như:

<ul id='list' data-bind="foreach: array"> 
    <li> 
    <div contenteditable="true" data-bind="hasfocus: $data.focused, text: $data.text"></div> 
    </li> 
</ul> 
<div id="add">+</div> 

xem mô hình:

var newObject = {text : '', focused: true}; 
viewModel.array.push(newObject); 

Mẫu: http://jsfiddle.net/rniemeyer/jnHK8/

+1

cảm ơn. mặc dù nó khá bực mình khi tôi có thể lấy dữ liệu bằng dom, nhưng không phải ngược lại –

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