</div> <div id="add">+</div> Javascript var viewModel = { array:"> </div> <div id="add">+</div> Javascript var viewModel = { array:"> </div> <div id="add">+</div> Javascript var viewModel = { array:" />

Как получить элемент DOM, привязанный к определенному объекту в KnockoutJS?

У меня есть наблюдаемый массив, связанный со списком контентных div. У меня есть кнопка «добавить». При щелчке я добавляю объект в массив и хочу дать фокус соответствующему div.

  • <div contenteditable="true" data-bind="text: $data.text"></div>
<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
};

Можно получить наблюдаемые данные с элементом DOM ko.dataFor (dom) . Как получить DOM по данным?

http://jsfiddle.net/5rxdZ/

благодаря

5
nl ja de

1 ответы

You can't get the DOM element from the data itself. In this scenario though, you could use the hasfocus binding to move focus to the new element. Docs here: http://knockoutjs.com/documentation/hasfocus-binding.html

Даже просто размещение hasfocus: true в новом элементе сделает трюк.

В противном случае, если вы не хотите, чтобы фокус был применен для первоначально обработанных элементов, вы можете передать флаг для вновь созданного элемента, например:

  • <div contenteditable="true" data-bind="hasfocus: $data.focused, text: $data.text"></div>
<div id="add">+</div>

посмотреть модель:

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

Sample: http://jsfiddle.net/rniemeyer/jnHK8/

6
добавлено
Спасибо. хотя довольно сложно, что я могу получить данные по dom, но не наоборот
добавлено автор Sasha Grinevich, источник